2

我有一个搜索某些文件并下载它们的网络爬虫,但是当“另存为或打开”对话框提示时如何下载 pdf 文件。我目前正在使用 python selenium 进行爬网。这是我的代码。

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

1 回答 1

4

您将需要修改 Firefox 配置文件的首选项。为了让它停止显示该对话框,您需要设置browser.helperApps.neverAsk.saveToDisk正在使用的配置文件的属性。为此,您可以这样做(请注意,这是针对 CSV/Excel 文件的 - 我相信您的类型是“应用程序/pdf”):

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

browser = webdriver.Firefox(firefox_profile=profile)

现在,当您下载该元组中的某个类型的文件时,它应该绕过提示并将其放在您的默认目录中。如果要更改文件下载的目录,可以使用相同的过程,只需更改一些内容(在将 附加profile到浏览器之前执行此操作):

profile.set_preference('browser.download.folderList': 2)
profile.set_preference('browser.download.dir': '/path/to/your/dir')
于 2012-08-23T20:26:10.043 回答