Selenium wait for page to load

di Lorenzo Neri
196 visualizzazioni

Selenium wait for page to load: come far sì che selenium aspetti che la pagina si sia caricata? Ti sarà capitato sicuramente di chiederti come sia possibile, attraverso l’utilizzo di Selenium, essere sicuro al 100% che la pagina web si sia caricata completamente: altrimenti non saresti qui. La famosa wait for page to load, ovvero mettersi in attesa finché la pagina non sia completamente caricata è qualcosa che torna comodo in diversi contesti e puoi scoprirlo leggendo questo articolo!

In diverse operazioni di web scraping o automazioni con l’uso di un browser web, può capitare che sia necessario aspettare che la pagina sia completamente caricata: come possiamo far sì che Selenium sia completamente sicuro di ciò?

Prima di cominciare però, forse non mi conosci ed è giusto presentarsi!

Ciao mi chiamo Lorenzo Neri e sono un informatico: mi occupo di realizzare contenuti che aiutino persone come te a padroneggiare l’arte del nuovo millennio, l’informatica!

Devi sapere che questo articolo così come tanti altri sono frutto dei miei sbagli nel corso della mia vita lavorativa: poi ho deciso di fare qualcosa in più.

Come? Documentando.

Documentando con vari articoli che possano aiutare persone come te che mi stai leggendo a risolvere gli stessi problemi che ho incontrato io.

Wait for page to load: come aspettare che la pagina sia carica

Selenium, di cui ho parlato in diversi articoli nel blog che trovi qui, permette di mettere in attesa il webdriver. In attesa si intende, che può aspettare che la pagina web che sta attualmente visualizzando sia in un determinato stato: ovvero che sia carica al 100%.

Abbiamo però, diversi modi per farlo.

Selenium e il potere della explicit wait

I webdriver di Selenium ci permettono di specificare le loro condizioni di attesa. Ciò significa che possiamo impostare una condizione per la quale, il webdriver stesso rimane fermo finché la condizione da noi impostata si mantiene.

Ma anche qui, facciamo un esempio.

Ammettiamo che una data pagina web mostri un banner dopo circa 15 secondi.

Quindi, possiamo imporre al webdriver di aspettare finché il banner non appare.

Dopo ovviamente 15 secondi.

Per intenderci in Python sarebbe così:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("www.sitoweb.it")
try:
   elemento = WebDriverWait(driver,15).until(
      EC.presence_of_element_located((By.ID,"disclaimer_a_comparsa"))
   )
finally:
  print("Attesa terminata")

In questo modo la wait for page to load avviene come segue: il webdriver capisce di dover aspettare per 15 secondi, ma se il disclaimer apparisse prima, l’attesa viene ridotta.

La via implicita: wait for page con implicit wait

Questa modalità deriva dal NON uso della precedente: in che senso?

Nel senso che, se sai ESATTAMENTE quanto tempo aspettare dovresti usare questo metodo.

Se, diversamente NON sai quanto è il tempo per cui mettere in attesa il webdriver, dovresti usare il precedente.

Chiarito questo punto, ammettiamo che il disclaimer di prima ci metta 5 secondi a caricarsi.

Qual è la differenza?

Passati 5 secondi a prescindere dal fatto che il disclaimer compaia nei tempi previsti oppure no, il webdriver proseguirà nella sua esecuzione.

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS)
driver.get("www.sitoweb.it")
WebElement disclaimer = driver.findElement(By.id("disclaimer_a_comparsa"))

Continua a scoprire di più con questi articoli!

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più