我有一个网络爬虫,可以搜索并下载某些文件,但是当“另存为或打开”对话框提示时如何下载pdf文件。我目前正在使用pythonselenium进行爬网。这是我的代码。
from selenium import webdriver import time browser = webdriver.Firefox() # Get local session of firefox browser.get("http://www.tda-sgft.com/TdaWeb/jsp/fondos/Fondos.tda") # Load page link = browser.find_element_by_link_text("Mortgage Loan") link.click() link2 = browser.find_element_by_link_text("ABS") link2.click() link3 = browser.find_element_by_link_text("TDA 13 Mixto") link3.click() download = browser.find_element_by_link_text("General Fund Information") download.click() time.sleep(0.2) # Let the page load, will be added to the API browser.close()
您将需要修改Firefox配置文件的首选项。为了使其不再显示该对话框,您需要设置使用browser.helperApps.neverAsk.saveToDisk中的配置文件的属性。为此,您可以执行此操作(请注意,这是针对CSV / Excel文件的-我认为您的类型将为“应用程序/ pdf”):
browser.helperApps.neverAsk.saveToDisk
profile = webdriver.firefox.firefox_profile.FirefoxProfile() profile.set_preference('browser.helperApps.neverAsk.saveToDisk', ('text/csv,' 'application/csv,' 'application/msexcel'))
对于您的情况(我还没有使用PDF进行过测试,所以要加一点盐:)),您可以尝试以下操作:
profile = webdriver.firefox.firefox_profile.FirefoxProfile() profile.set_preference('browser.helperApps.neverAsk.saveToDisk', ('application/pdf'))
第二个参数是一个元组,其中包含永远不会触发Save As提示的文件类型。然后,您将此个人资料传递到您的browser:
Save As
browser
browser = webdriver.Firefox(firefox_profile=profile)
现在,当您在该元组中下载某个类型的文件时,它应绕过提示并将其放在默认目录中。如果您想更改文件下载的目录,则可以使用相同的过程,只需更改几件事(将附加profile到浏览器之前执行此操作):
profile
profile.set_preference('browser.download.folderList': 2) profile.set_preference('browser.download.dir': '/path/to/your/dir')