Di recente ho avuto l'idea di utilizzare Selenium con Python per automatizzare alcune attività ripetitive in SAP per un cliente. E come sempre succede quando ti sporchi le mani con il codice, Ho iniziato a trovare alcune sfide che non avrei mai visto arrivare. Dopo aver passato molto tempo a navigare in Internet cercando di trovare la soluzione più adatta ad ogni problema, pensare:
Quanto sarebbe stato bello se avessi trovato tutto ciò di cui avevi bisogno raccolto in un unico posto, pronto all'uso?
Quindi, per semplificare loro la vita, Ho raccolto in questo articolo, le risposte alle sfide più frequenti un utente può trovare utilizzando Selenium in combinazione con Frammenti di codice pronti all'uso scritti in Python.
PD: Se ancora non ti senti a casa con le basi del Selenio, Puoi consultare la nostra Guida introduttiva al selenio. Articolo primo.
E ora entriamo in azione!
Come scaricare file utilizzando Selenium WebDriver
Quando si utilizza Selenium per automatizzare la navigazione, potrebbe essere necessario scaricare file. Il problema è che, non appena selezioniamo e facciamo clic sul collegamento per il download, viene visualizzata una finestra di dialogo nativa che richiede un intervento manuale. Selenium non ha alcun controllo sulle finestre di download dei file del browser, impossibile continuare con il processo di download. fortunatamente, ci sono sempre alternative.
Risolvere questo problema, puoi autorizzare il tuo browser a scaricare automaticamente i file in anticipo e impostare una posizione di file di download predefinita. Questo può essere fatto impostando le preferenze per il profilo WebDriver (il codice sotto è per un browser Firefox, potrebbe essere necessario adattarlo per funzionare in altri browser):
importare download_dir = os.getcwd()# directory di lavoro corrente profilo = webdriver.FirefoxProfile() profile.set_preference("browser.download.folderList", 2) # la posizione personalizzata specificata browser.download.dir è abilitata quando browser.download.folderList è uguale a 2 profile.set_preference('browser.download.dir', download_dir) profile.set_preference("browser.download.manager.showWhenStarting", falso) profile.set_preference("browser.download.dir", il percorso) profile.set_preference('browser.helperApps.neverAsk.saveToDisk', TIPO DI CONTENUTO) profile.set_preference("webdriver_enable_native_events", falso) profile.set_preference("browser.download.manager.scanWhenDone",falso) profile.set_preference("browser.download.manager.useWindow",falso) profile.set_preference("browser.helperApps.alwaysAsk.force",falso) profile.update_preferences() browser = driver web.Firefox(firefox_profile=profilo)
Potresti aver notato che CONTENT_TYPE
variabile che devi sostituire. In realtà, corrisponde al tipo MIME del file che stai scaricando. Se non conosci questo termine, Tipo mimo è semplicemente un identificatore che viene utilizzato per riconoscere un tipo di dati per i contenuti su Internet. Serve allo stesso scopo su Internet delle estensioni di file nel tuo sistema operativo.
Per semplificare il tuo compito, Ho rimosso i tipi MIME delle estensioni più comuni dai documenti web di Mozilla, per facilitare l'accesso. Nel widget qui sotto, troverai il codice che devi usare per ottenere il tipo di contenuto corrispondente alla tua estensione di file. Puoi usare la console per testarlo immediatamente!!
Puoi ottenere il file JSON copiando e incollando dal widget sopra o scaricandolo da Github.
Ora, il tuo WebDriver dovrebbe essere in grado di scaricare senza chiedere il permesso o mostrare finestre di dialogo 😉