Python Selenium accédant à la source HTML

97

Comment puis-je obtenir la source HTML dans une variable en utilisant le module Selenium avec Python?

Je voulais faire quelque chose comme ça:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://example.com")
if "whatever" in html_source:
    # Do something
else:
    # Do something else

Comment puis-je faire ceci? Je ne sais pas comment accéder à la source HTML.

user1008791
la source
2
Écrivez la ligne suivante avant la condition if: html_source = browser.page_source
Abdul Majeed

Réponses:

191

Vous devez accéder à la page_sourcepropriété:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://example.com")

html_source = browser.page_source
if "whatever" in html_source:
    # do something
else:
    # do something else
AutomatedTester
la source
6
Meilleure réponse à ce jour! La façon la plus immédiate et la plus claire de le faire, beaucoup plus compacte que l'autre, toujours valable, alternative ( find_element_by_xpath("//*").get_attribute("outerHTML")(
5agado
13
Et si nous avons besoin d'obtenir la source de la page après l'exécution de tout le javascript.?
Yogeesh Seralathan
4
Fonctionne uniquement si la page est complètement chargée. Si la page se charge indéfiniment, cette propriété ne fonctionne pas.
TheRookierLearner
5

Avec Selenium2Library, vous pouvez utiliser get_source()

import Selenium2Library
s = Selenium2Library.Selenium2Library()
s.open_browser("localhost:7080", "firefox")
source = s.get_source()
Milanka
la source
7
Puis-je définir un délai et obtenir la dernière source? Il y a des contenus dynamiques chargés en javascript.
CodeGuru
4

driver.page_source vous aidera à obtenir le code source de la page. Vous pouvez vérifier si le texte est présent dans la source de la page ou non.

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("some url")
if "your text here" in driver.page_source:
    print('Found it!')
else:
    print('Did not find it.')

Si vous souhaitez stocker la source de la page dans une variable, ajoutez la ligne ci-dessous après driver.get :

var_pgsource=driver.page_source

et changez la condition if en:

if "your text here" in var_pgsource:
Dhiraj
la source
1
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la façon et / ou pourquoi il résout le problème améliorerait la valeur à long terme de la réponse.
Nic3500
2

En utilisant la source de la page, vous obtiendrez l'intégralité du code HTML.
Alors commencez par décider du bloc de code ou de la balise dans lequel vous souhaitez récupérer les données ou cliquer sur l'élément.

options = driver.find_elements_by_name_("XXX")
for option in options:
    if option.text == "XXXXXX":
        print(option.text)
        option.click()

Vous pouvez trouver les éléments par nom, XPath, id, lien et chemin CSS.

Mahesh Reddy Atla
la source
1

Pour répondre à votre question sur l'obtention de l' URL à utiliser pour urllib, exécutez simplement ce code JavaScript:

url = browser.execute_script("return window.location;")
Bob Evans
la source
1

Vous pouvez simplement utiliser l' WebDriverobjet, et accéder au code source de la page via son @propertychamppage_source ...

Essayez cet extrait de code :-)

from selenium import webdriver
driver = webdriver.Firefox('path/to/executable')
driver.get('https://some-domain.com')
source = driver.page_source
if 'stuff' in source:
    print('found...')
else:
    print('not in source...')
SysMurff
la source
en quoi cette réponse diffère-t-elle de stackoverflow.com/a/7866938/2231972 ?
Roman Konoval
1
from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome()
html_source_code = driver.execute_script("return document.body.innerHTML;")
html_soup: BeautifulSoup = BeautifulSoup(html_source_code, 'html.parser')

Vous pouvez maintenant appliquer la fonction BeautifulSoup pour extraire des données ...

Mobin Alhassan
la source
-6

Je vous recommande d'obtenir la source avec urllib et, si vous voulez analyser, utilisez quelque chose comme Beautiful Soup .

import urllib

url = urllib.urlopen("http://example.com") # Open the URL.
content = url.readlines() # Read the source and save it to a variable.
Griffon
la source
D'accord, savez-vous comment je peux obtenir l'URL dans Selenium? Je veux stocker l'URL dans une variable pour pouvoir y accéder avec urllib.
user1008791
@ user1008791 Est-ce important? Vous laissez apparemment l'utilisateur le saisir de toute façon en utilisant raw_input, faites de même mais avec urllib.
Griffin
C'était juste pour donner un exemple simple, l'URL va beaucoup changer.
user1008791
8
Selenium fait beaucoup de choses qu'urllib ne fait pas (par exemple, l'exécution de JavaScript).
mpenkov
Utiliser l'urllib ici est inutile, pourquoi? AutomatedTester a raison, c'est ce que je fais pour analyser les sources HTML pour m'assurer que nous ne poussons pas le code de l'environnement de développement.
Dave