J'utilise les liaisons Python pour exécuter Selenium WebDriver:
from selenium import webdriver
wd = webdriver.Firefox()
Je sais que je peux saisir un élément Web comme ceci:
elem = wd.find_element_by_css_selector('#my-id')
Et je sais que je peux obtenir la source de la page complète avec ...
wd.page_source
Mais existe-t-il de toute façon pour obtenir la "source de l'élément"?
elem.source # <-- returns the HTML as a string
Les documents de sélecteur Web sélénium pour Python sont fondamentalement inexistants et je ne vois rien dans le code qui semble activer cette fonctionnalité.
Avez-vous des réflexions sur la meilleure façon d'accéder au HTML d'un élément (et de ses enfants)?
wd.page_source
avec beautifulsoupRéponses:
Vous pouvez lire l'
innerHTML
attribut pour obtenir la source du contenu de l'élément ououterHTML
pour la source avec l'élément actuel.Python:
Java:
C #:
Rubis:
JS:
PHP:
Testé et fonctionne avec le
ChromeDriver
.la source
getAttribute
méthode (ou l'équivalent dans d'autres langues) appelle simplement la méthode js dont le nom est l'arg. Cependant, la documentation ne le dit pas explicitement, donc la solution de nilesh devrait être une solution de rechange.HtmlUnitDriver
. Travaille pourChromeDriver
,FirefoxDriver
,InternetExplorerDriver
(IE10) etPhantomJSDriver
(je ne l' ai pas testé d' autres).Il n'y a pas vraiment de moyen simple d'obtenir le code source html d'un fichier
webelement
. Vous devrez utiliser JS. Je ne suis pas trop sûr des liaisons python mais vous pouvez facilement faire ça en Java. Je suis sûr qu'il doit y avoir quelque chose de similaire à laJavascriptExecutor
classe en Python.la source
innerHTML
n'est pas un attribut DOM. Lorsque j'ai répondu à cette question en 2011, cela n'a pas fonctionné pour moi, semble maintenant que certains navigateurs le prennent en charge. Si cela fonctionne pour vous, l'utilisationinnerHTML
est plus propre. Cependant, il n'y a aucune garantie que cela fonctionnera sur tous les navigateurs.Bien sûr, nous pouvons obtenir tout le code source HTML avec ce script ci-dessous dans Selenium Python:
Si vous souhaitez l'enregistrer dans un fichier:
Je suggère d'enregistrer dans un fichier car le code source est très très long.
la source
Dans Ruby, à l'aide de selenium-webdriver (2.32.1), il existe une
page_source
méthode qui contient la source de la page entière.la source
L'utilisation de la méthode d'attribut est en fait plus simple et plus simple.
En utilisant Ruby avec les gemmes Selenium et PageObject, pour obtenir la classe associée à un certain élément, la ligne le serait
element.attribute(Class)
.Le même concept s'applique si vous souhaitez obtenir d'autres attributs liés à l'élément. Par exemple, si je voulais la chaîne d'un élément,
element.attribute(String)
.la source
Semble obsolète, mais que ce soit ici quand même. La façon correcte de le faire dans votre cas:
ou
Les deux fonctionnent pour moi (selenium-server-standalone-2.35.0)
la source
Java avec Selenium 2.53.0
la source
getPageSource
méthode peut ne pas retourner la source de la page réelle (c'est-à-dire avec d'éventuels changements javascript). La source retournée peut être la source brute envoyée par le serveur. Le document webdriver doit être vérifié pour garantir ce point.J'espère que cela pourrait aider: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html
Voici la méthode Java décrite:
Mais malheureusement, il n'est pas disponible en Python. Vous pouvez donc traduire les noms de méthode en Python à partir de Java et essayer une autre logique en utilisant les méthodes actuelles sans obtenir la source de page entière ...
Par exemple
la source
Cela fonctionne parfaitement pour moi.
la source
InnerHTML retournera l'élément à l'intérieur de l'élément sélectionné et externalHTML retournera à l'intérieur du HTML avec l'élément que vous avez sélectionné
Exemple: - Supposons maintenant que votre élément soit comme ci-dessous
Élément innerHTML Sortie
Élément externeHTML Sortie
Exemple en direct: -
http://www.java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_between_innerhtml_and_outerhtml_in_javascript_example.htm
Vous trouverez ci-dessous la syntaxe qui nécessite selon une liaison différente. Modifiez le
innerHTML
àouterHTML
selon les besoins.Python:
Java:
Si vous voulez utiliser le code HTML de la page entière ci-dessous: -
la source
Ce code fonctionne vraiment aussi pour obtenir du code source depuis JavaScript!
la source
Et dans le test PHPUnit sélénium, c'est comme ceci:
la source
Si vous êtes intéressé par une solution de contrôle à distance en Python, voici comment obtenir innerHTML:
la source
innerHTML = {solenium selector code}.text
œuvres tout de même.La méthode pour obtenir le HTML rendu que je préfère est la suivante:
Cependant, la méthode ci-dessus supprime toutes les balises (oui les balises imbriquées également) et renvoie uniquement le contenu texte. Si vous souhaitez également obtenir le balisage HTML, utilisez la méthode ci-dessous.
la source