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