Python Selenium che accede al sorgente HTML


97

Come posso ottenere l' HTML sorgente in una variabile utilizzando il modulo Selenium con Python?

Volevo fare qualcosa del genere:

from selenium import webdriver

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

Come posso fare questo? Non so come accedere al sorgente HTML.


2
Scrivi la seguente riga prima della condizione if: html_source = browser.page_source
Abdul Majeed

Risposte:


191

Devi accedere alla page_sourceproprietà:

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
La migliore risposta finora! Il modo più immediato e chiaro per farlo, molto più compatto dell'altro, ancora valido, alternativo ( find_element_by_xpath("//*").get_attribute("outerHTML")(
5agado

13
E se avessimo bisogno di ottenere il sorgente della pagina dopo che tutto il javascript è stato eseguito?
Yogeesh Seralathan

4
Funziona solo se la pagina è stata caricata completamente. Se la pagina viene caricata indefinitamente, questa proprietà non funziona.
TheRookierLearner

5

Con Selenium2Library puoi usare get_source()

import Selenium2Library
s = Selenium2Library.Selenium2Library()
s.open_browser("localhost:7080", "firefox")
source = s.get_source()

7
Posso impostare un ritardo e ottenere l'ultima fonte? Ci sono contenuti dinamici caricati usando javascript.
CodeGuru

4

driver.page_source ti aiuterà a ottenere il codice sorgente della pagina. Puoi controllare se il testo è presente o meno nel sorgente della pagina.

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

Se desideri memorizzare il sorgente della pagina in una variabile, aggiungi sotto la riga dopo driver.get :

var_pgsource=driver.page_source

e modificare la condizione if in:

if "your text here" in var_pgsource:

1
Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo su come e / o perché risolve il problema migliorerebbe il valore a lungo termine della risposta.
Nic3500

2

Usando il sorgente della pagina otterrai l'intero codice HTML.
Quindi, prima decidi il blocco di codice o tag in cui desideri recuperare i dati o fare clic sull'elemento.

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

Puoi trovare gli elementi per nome, XPath, id, link e percorso CSS.


1

Per rispondere alla tua domanda su come ottenere l' URL da utilizzare per urllib, esegui semplicemente questo codice JavaScript:

url = browser.execute_script("return window.location;")

1

Puoi semplicemente usare l' WebDriveroggetto e accedere al codice sorgente della pagina tramite il suo @propertycampo page_source...

Prova questo frammento di codice :-)

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

in che modo questa risposta differisce da 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')

Ora puoi applicare la funzione BeautifulSoup per estrarre i dati ...


-6

Consiglierei di ottenere il sorgente con urllib e, se hai intenzione di analizzarlo, usa qualcosa come 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.

Va bene, allora sai come posso ottenere l'URL all'interno di Selenium? Voglio memorizzare l'URL in una variabile in modo da potervi accedere con urllib.
user1008791

@ user1008791 È importante? Apparentemente stai lasciando che l'utente lo digiti comunque usando raw_input, fai lo stesso ma con urllib.
Griffin

Era solo per fare un semplice esempio, l'URL cambierà molto.
user1008791

8
Il selenio fa molte cose che urllib non fa (ad esempio l'esecuzione di JavaScript).
mpenkov

Usare l'urllib qui è inutile, perché? AutomatedTester lo ha corretto, è quello che faccio per la scansione attraverso il sorgente HTML per assicurarmi di non spingere il codice dell'ambiente di sviluppo.
Dave
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.