Python Selenium greift auf HTML-Quelle zu

97

Wie kann ich die HTML- Quelle in einer Variablen mithilfe des Selenium-Moduls mit Python abrufen?

Ich wollte so etwas machen:

from selenium import webdriver

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

Wie kann ich das machen? Ich weiß nicht, wie ich auf die HTML-Quelle zugreifen soll.

user1008791
quelle
2
Schreiben Sie die folgende Zeile vor, wenn Bedingung: html_source = browser.page_source
Abdul Majeed

Antworten:

191

Sie müssen auf die page_sourceEigenschaft zugreifen :

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
quelle
6
Beste Antwort bisher! Der unmittelbarste und klarste Weg, dies zu tun, ist viel kompakter als die andere, noch gültige Alternative ( find_element_by_xpath("//*").get_attribute("outerHTML")(
5agado
13
Was ist, wenn wir nach der Ausführung von Javascript eine Seitenquelle benötigen?
Yogeesh Seralathan
4
Funktioniert nur, wenn die Seite vollständig geladen wurde. Wenn die Seite unbegrenzt geladen wird, funktioniert diese Eigenschaft nicht.
TheRookierLearner
5

Mit Selenium2Library können Sie verwenden get_source()

import Selenium2Library
s = Selenium2Library.Selenium2Library()
s.open_browser("localhost:7080", "firefox")
source = s.get_source()
Milanka
quelle
7
Kann ich eine Verzögerung einstellen und die neueste Quelle abrufen? Es werden dynamische Inhalte mit Javascript geladen.
CodeGuru
4

driver.page_source hilft Ihnen beim Abrufen des Seitenquellcodes . Sie können überprüfen, ob der Text in der Seitenquelle vorhanden ist oder nicht.

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.')

Wenn Sie die Seitenquelle in einer Variablen speichern möchten, fügen Sie nach driver.get die folgende Zeile hinzu :

var_pgsource=driver.page_source

und ändern Sie das if Bedingung in:

if "your text here" in var_pgsource:
Dhiraj
quelle
1
Während dieser Code die Frage beantworten kann, würde die Bereitstellung eines zusätzlichen Kontexts darüber, wie und / oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern.
Nic3500
2

Wenn Sie die Seitenquelle verwenden, erhalten Sie den gesamten HTML-Code.
Entscheiden Sie also zuerst den Code- oder Tag-Block, in dem Sie die Daten abrufen oder auf das Element klicken möchten.

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

Sie finden die Elemente nach Name, XPath, ID, Link und CSS-Pfad.

Mahesh Reddy Atla
quelle
1

Führen Sie einfach diesen JavaScript-Code aus, um Ihre Frage zu beantworten, wie die URL für urllib verwendet werden soll:

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

Sie können das WebDriverObjekt einfach verwenden und über das @propertyFeld auf den Seitenquellcode zugreifen page_source...

Probieren Sie dieses Code-Snippet aus :-)

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
quelle
Wie unterscheidet sich diese Antwort von 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')

Jetzt können Sie die BeautifulSoup-Funktion anwenden, um Daten zu extrahieren ...

Mobin Alhassan
quelle
-6

Ich würde empfehlen, die Quelle mit urllib zu erhalten und, wenn Sie analysieren wollen, etwas wie Schöne Suppe zu verwenden .

import urllib

url = urllib.urlopen("http://example.com") # Open the URL.
content = url.readlines() # Read the source and save it to a variable.
Greif
quelle
Okay, wissen Sie dann, wie ich die URL in Selenium erhalten kann? Ich möchte die URL in einer Variablen speichern, damit ich mit urllib darauf zugreifen kann.
user1008791
@ user1008791 Ist das wichtig? Sie lassen den Benutzer anscheinend trotzdem mit raw_input eingeben. Machen Sie dasselbe, aber mit urllib.
Griffin
Das war nur um ein einfaches Beispiel zu machen, die URL wird sich sehr ändern.
user1008791
8
Selen macht viele Dinge, die urllib nicht macht (zB Ausführung von JavaScript).
Mpenkov
Die urllib hier zu benutzen ist sinnlos, warum? AutomatedTester hat es richtig gemacht, es ist das, was ich zum Scannen von HTML-Quellen mache, um sicherzustellen, dass wir keinen Code für die Entwicklungsumgebung pushen.
Dave