Estou usando as ligações Python para executar o Selenium WebDriver:
from selenium import webdriver
wd = webdriver.Firefox()
Eu sei que posso pegar um elemento da Web assim:
elem = wd.find_element_by_css_selector('#my-id')
E eu sei que posso obter a fonte da página inteira com ...
wd.page_source
Mas existe uma maneira de obter a "fonte do elemento"?
elem.source # <-- returns the HTML as a string
Os documentos do selenium webdriver para Python são basicamente inexistentes e não vejo nada no código que pareça ativar essa funcionalidade.
Alguma idéia sobre a melhor maneira de acessar o HTML de um elemento (e seus filhos)?
wd.page_source
com BeautifulSoupRespostas:
Você pode ler o
innerHTML
atributo para obter a origem do conteúdo do elemento ououterHTML
a origem com o elemento atual.Pitão:
Java:
C #:
Rubi:
JS:
PHP:
Testado e trabalha com o
ChromeDriver
.fonte
getAttribute
método (ou equivalente em outros idiomas) apenas chama o método js cujo nome é arg. No entanto, a documentação não diz isso explicitamente, portanto a solução da nilesh deve ser um substituto.HtmlUnitDriver
. Trabalha paraChromeDriver
,FirefoxDriver
,InternetExplorerDriver
(IE10) ePhantomJSDriver
(eu não testei outras).Não existe realmente uma maneira direta de obter o código fonte html de a
webelement
. Você terá que usar JS. Não tenho muita certeza sobre ligações python, mas você pode fazer isso facilmente em Java. Estou certo de que deve haver algo semelhante àJavascriptExecutor
classe em Python.fonte
innerHTML
não é um atributo DOM. Quando eu respondi a essa pergunta em 2011, ela não funcionou para mim, parece que agora alguns navegadores a suportam. Se funcionar para você, o usoinnerHTML
é mais limpo. No entanto, não há garantia de que funcione em todos os navegadores.Certamente, podemos obter todo o código-fonte HTML com este script abaixo no Selenium Python:
Se você deseja salvá-lo em um arquivo:
Sugiro salvar em um arquivo porque o código-fonte é muito, muito longo.
fonte
No Ruby, usando o selenium-webdriver (2.32.1), existe um
page_source
método que contém toda a fonte da página.fonte
Usar o método de atributo é, de fato, mais fácil e mais direto.
Usando Ruby com as gemas Selenium e PageObject, para obter a classe associada a um determinado elemento, a linha seria
element.attribute(Class)
.O mesmo conceito se aplica se você deseja vincular outros atributos ao elemento. Por exemplo, se eu quisesse a String de um elemento
element.attribute(String)
,.fonte
Parece desatualizado, mas deixe estar aqui de qualquer maneira. A maneira correta de fazer isso no seu caso:
ou
Ambos estão trabalhando para mim (selenium-server-standalone-2.35.0)
fonte
Java com Selenium 2.53.0
fonte
getPageSource
método pode não retornar a fonte da página real (por exemplo, com possíveis alterações de javascript). A fonte retornada pode ser a fonte bruta enviada pelo servidor. O documento do driver da web deve ser verificado para garantir esse ponto.Espero que isso possa ajudar: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html
Aqui está descrito o método Java:
Mas, infelizmente, não está disponível no Python. Assim, você pode traduzir os nomes dos métodos para Python a partir de Java e tentar outra lógica usando os métodos atuais sem obter toda a fonte da página ...
Por exemplo
fonte
Isso funciona perfeitamente para mim.
fonte
InnerHTML retornará elemento dentro do elemento selecionado e outerHTML retornará dentro de HTML junto com o elemento que você selecionou
Exemplo: - Agora, suponha que seu elemento seja como abaixo
elemento innerHTML Saída
elemento outerHTML Saída
Exemplo ao vivo: -
http://www.java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_between_innerhtml_and_outerhtml_in_javascript_example.htm
Abaixo, você encontrará a sintaxe necessária conforme a ligação diferente. Mude
innerHTML
paraouterHTML
conforme necessário.Pitão:
Java:
Se você deseja HTML de página inteira, use o código abaixo: -
fonte
Esse código realmente funciona para obter JavaScript da fonte também!
fonte
E no teste de selênio do PHPUnit é assim:
fonte
Se você está interessado em uma solução para Controle Remoto em Python, veja como obter o innerHTML:
fonte
innerHTML = {solenium selector code}.text
funciona da mesma forma.O método para obter o HTML renderizado que eu prefiro é o seguinte:
No entanto, o método acima remove todas as tags (sim, também as tags aninhadas) e retorna apenas o conteúdo do texto. Se você também estiver interessado em obter a marcação HTML, use o método abaixo.
fonte