6

Sono un neofita del selenio e sto scrivendo un raschietto per scaricare automaticamente i file pdf da un determinato sito.Download automatico PDF selenio non funzionante

Qui di seguito è il mio codice:

from selenium import webdriver 

fp = webdriver.FirefoxProfile() 

fp.set_preference("browser.download.folderList",2); 
fp.set_preference("browser.download.manager.showWhenStarting",False) 
fp.set_preference("browser.download.dir", "/home/jill/Downloads/Dinamalar") 
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf") 

browser = webdriver.Firefox(firefox_profile=fp) 
browser.get("http://epaper.dinamalar.com/PUBLICATIONS/DM/MADHURAI/2015/05/26/PagePrint//26_05_2015_001_b2b69fda315301809dda359a6d3d9689.pdf"); 
webobj = browser.find_element_by_id("download").click(); 

Ho seguito la procedura di cui al selenio documentation e in questo link. Non sono sicuro del motivo per cui la finestra di dialogo di download viene visualizzata ogni volta.

C'è comunque un modo per risolvere il problema altrimenti ci può essere un modo per dare "application/all" in modo che tutti i file possano essere scaricati (work-around)?

risposta

6

Disabilitare il built-in pdfjs plug-in e spostarsi all'URL - il file PDF verrà scaricato automaticamente, il codice:

from selenium import webdriver 

fp = webdriver.FirefoxProfile() 

fp.set_preference("browser.download.folderList", 2) 
fp.set_preference("browser.download.manager.showWhenStarting",False) 
fp.set_preference("browser.download.dir", "/home/jill/Downloads/Dinamalar") 
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf,application/x-pdf") 

fp.set_preference("pdfjs.disabled", "true") # < KEY PART HERE 

browser = webdriver.Firefox(firefox_profile=fp) 
browser.get("http://epaper.dinamalar.com/PUBLICATIONS/DM/MADHURAI/2015/05/26/PagePrint//26_05_2015_001_b2b69fda315301809dda359a6d3d9689.pdf"); 

Update (il codice completo che ha funzionato per me):

from selenium import webdriver 

mime_types = "application/pdf,application/vnd.adobe.xfdf,application/vnd.fdf,application/vnd.adobe.xdp+xml" 

fp = webdriver.FirefoxProfile() 
fp.set_preference("browser.download.folderList", 2) 
fp.set_preference("browser.download.manager.showWhenStarting", False) 
fp.set_preference("browser.download.dir", "/home/aafanasiev/Downloads") 
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", mime_types) 
fp.set_preference("plugin.disable_full_page_plugin_for_types", mime_types) 
fp.set_preference("pdfjs.disabled", True) 

browser = webdriver.Firefox(firefox_profile=fp) 
browser.get("http://epaper.dinamalar.com/") 

webobj_get_link = browser.find_element_by_id("liSavePdf") 
webobj_get_object = webobj_get_link.find_element_by_tag_name("a") 
webobj_get_object.click() 
+0

Continuo ad affrontare il problema anche dopo il codice menzionato. Qualunque sistema operativo casuale ha qualche ruolo in questo? Io uso UBUNTU 14.04. – Gaara

+0

@Gara interessante, funziona per me: selenio 2.45 + firefox 35.0.1 su Mac. – alecxe

+0

mine è Selenium 2.45.0, Ubuntu 14.04 firefox 38.0. Sto provando ogni possibilità. Anche la finestra pop-up dei download non viene gestita da una finestra. Non cade in allerta. Qualche idea su cosa si può fare di più? Posso pubblicare un link al mio script, se lo desideri. – Gaara

0

Dal momento che non v'è il codice HTML a disposizione, la mia ipotesi è che questa linea

webobj = browser.find_element_by_id("download").click(); 

in realtà chiama l'evento onclick, ma non si gestisce correttamente. In altre parole, quello che ti manca è la posizione in cui verrà archiviato questo file .pdf. Ho poca esperienza con la programmazione Python, ma una soluzione potrebbe essere quella di usare lib webclient HTTP, che ti permetterà di scaricare automaticamente i file. Qualcosa come CSharp's WebClient.DownloadFile Method (String, String). E se usato correttamente, puoi saltare qualsiasi comando Selenium per questa azione.

Forse qualcosa come this post sarà un buon inizio.

0

ho provato il seguente codice ed io con successo scaricato il PDF su Windows 7:

fp = webdriver.FirefoxProfile() 
fp.set_preference("browser.download.folderList", 2) 
fp.set_preference("browser.download.manager.showWhenStarting", False) 
fp.set_preference("browser.download.dir", download_location) 
fp.set_preference("plugin.disable_full_page_plugin_for_types", "application/pdf") 
fp.set_preference("pdfjs.disabled", True) 
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf") 



driver = webdriver.Firefox(fp) 
driver.implicitly_wait(10) 
driver.maximize_window() 
driver.get("http://epaper.dinamalar.com/") 
element = driver.find_element_by_css_selector("li#liSavePdf>a>img") 
element.click() 
Problemi correlati