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.


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

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()

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:

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.


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;")

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

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


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.