6

Ich bin neu in Selen und ich schreibe einen Schaber, um PDF-Dateien automatisch von einer bestimmten Website herunterladen.Selen pdf automatische download funktioniert nicht

Unten ist mein Code:

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(); 

Ich folgte den in Selenium genannten Schritte documentation und in diesem link. Ich bin mir nicht sicher, warum das Download-Dialogfeld jedes Mal angezeigt wird.

Gibt es sowieso, um es zu beheben sonst gibt es eine Möglichkeit, "Anwendung/alle" zu geben, so dass alle Dateien heruntergeladen werden können (Work-Around)?

Antwort

6

Deaktivieren Sie den eingebauten in pdfjs Plugin und zu der URL navigieren - die PDF-Datei automatisch heruntergeladen werden würde, den Code:

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 (den vollständigen Code, der für mich gearbeitet):

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

Ich habe immer noch das Problem selbst nach dem genannten Code. Gibt es irgendeine Chance, dass OS etwas dabei hat? Ich benutze UBUNTU 14.04. – Gaara

+0

@Gaara interessant, es funktioniert für mich: Selen 2.45 + Firefox 35.0.1 auf Mac. – alecxe

+0

Mine ist Selenium 2.45.0, Ubuntu 14.04 Firefox 38.0. Ich versuche jede Möglichkeit. Downloads Pop-up-Fenster kommt auch nicht unter Fenstergriff. Es fällt nicht in Alarmbereitschaft. Irgendwelche Ideen, was noch getan werden kann? Ich kann einen Link zu meinem Skript veröffentlichen, wenn Sie möchten. – Gaara

0

Da es keine HTML-Code zur Verfügung steht, ist meine Vermutung, dass diese Linie

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

tatsächlich das onclick Ereignis ruft, aber Sie behandeln es nicht richtig. Mit anderen Worten, was Sie vermissen, ist der Ort, an dem diese .pdf-Datei gespeichert wird. Ich habe sehr wenig Erfahrung mit Python-Programmierung, aber eine Lösung könnte HTTP-Webclient-Bibliothek sein, mit der Sie Dateien automatisch herunterladen können. So etwas wie CSharp's WebClient.DownloadFile Method (String, String). Bei richtiger Verwendung können Sie alle Selenium-Befehle für diese Aktion überspringen.

Vielleicht etwas wie this post wird ein guter Anfang sein.

0

getestet habe ich den folgenden Code, und ich heruntergeladen erfolgreich Ihre pdf auf 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()