Esistono molti siti come TikTok dove i video vengono caricati man mano che si scorre verso il basso o ad esempio e-commerce dove le immagini vengono caricate solo nel momento dello scroll in modo "lazy".
Questo fatto per un utente medio è un vantaggio perché aiuta nel caricamento ma se ad esempio dobbiamo estrarre una grande quantità di dati risulta un problema.

Prima di tutto è necessario installare i pacchetti base:
pip install selenium webdriver_manager

Ora procediamo a configurare Selenium con ChromeDriver.
Per prima cosa impostiamo Selenium con ChromeDriver usando webdriver_manager per scaricare e gestire automaticamente l'eseguibile di ChromeDriver.
Vediamo come installare webdriver_manager Chrome in Selenium:

  • Installa l'ambiente Python
  • Installa Selenium:
    • pip install selenium
  • Installa webdriver_manager:
    • pip install webdriver_manager

Ora possiamo includerle nei nostri programmi:

from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium import webdriver

Il prossimo passo è creare il driver che verrà usato per estrarre i dati dai siti in questione:

service = ChromeService(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)

Ora con "get" possiamo richiamare il sito:
driver.get('https://sito.com')

Per chiudere:
driver.quit()

Facciamo un esempio, dobbiamo estrarre i dati da Wikipedia:

from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium import webdriver
import time

# Configura ChromeDriver
servizio = ChromeService(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=servizio)

Successivamente carichiamo la pagina web che desideriamo analizzare (o automatizzare).
driver.get("https://it.wikipedia.org/wiki/Pagina_principale")

Ora definiamo una funzione in JavaScript per scorrere gradualmente verso il basso, quindi tramite execute_script prende il codice JavaScript come parametro sotto forma di stringa.

script_di_scorrimento = """
    function scorriFinoInFondo() {
        var altezzaScorrimento = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);
        var passoScorrimento = 200;  // velocità
        var intervalloScorrimento = 100;  // interv. scorrimento

        function scorrimento() {
            window.scrollBy(0, passoScorrimento);
            var raggiuntoFondo = window.innerHeight + window.scrollY >= altezzaScorrimento;

            if (!raggiuntoFondo) {
                setTimeout(scorrimento, intervalloScorrimento);
            }
        }

        scorrimento();
    }

    scorriFinoInFondo();
"""

driver.execute_script(script_di_scorrimento)
driver.quit()

Se la connessione è lenta o il sito è pesante/lento bisogna giocare con la velocità di scorrimento (in questo caso abbassando l'intervallo e il passo di scorrimento) in modo che il sito si carichi insieme allo scorrimento.

Nel codice questa linea: var raggiuntoFondo = window.innerHeight + window.scrollY >= altezzaScorrimento; permette di far terminare il codice in maniera automatica, restituisce true se abbiamo raggiunto il fondo della pagina. Viene calcolato verificando se la somma dell'altezza attuale della finestra e la posizione di scorrimento è uguale o superiore all'altezza totale dello scorrimento.

Powered by: FreeFlarum.
(remove this footer)