6

我是新来的硒,我正在写一个刮板从给定的网站自动下载pdf文件。Selenium pdf自动下载不起作用

下面是我的代码:

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

我跟着硒documentation,并在此link提到的步骤。我不知道为什么下载对话框每次都显示出来。

有没有办法解决它否则有没有办法给“应用程序/所有”,以便所有的文件可以下载(变通)?

回答

6

禁用内置pdfjs插件并导航到URL - PDF文件会自动下载,代码:

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

更新(完整的代码为我工作):

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

即使在提到代码后,我仍然会遇到问题。任何机会操作系统在这方面有任何部分?我使用UBUNTU 14.04。 – Gaara

+0

@Gaara有趣,它适用于我:在Mac上硒2.45 +火狐35.0.1。 – alecxe

+0

我的是Selenium 2.45.0,Ubuntu 14.04 firefox 38.0。我正在尝试一切可能性。下载弹出窗口也不在窗口句柄下。它不属于戒备状态。任何想法可以做更多的事情?如果你愿意,我可以发布一个链接到我的脚本。 – Gaara

0

由于没有HTML代码中,我的猜测是,这条线

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

实际调用onclick事件,但你不妥善处理。换句话说,你缺少的是这个.pdf文件将被存储的位置。我对python编程的经验很少,但一种解决方案可能是使用HTTP webclient lib,这将允许您自动下载文件。类似于CSharp's WebClient.DownloadFile Method (String, String)。如果使用得当,您可以跳过此操作的任何Selenium命令。

也许像this post将是一个好的开始。

0

我测试下面的代码,我成功地下载PDF格式在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()