一尘不染

python webcrawler下载文件

selenium

我有一个网络爬虫,可以搜索并下载某些文件,但是当“另存为或打开”对话框提示时如何下载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()

阅读 330

收藏
2020-06-26

共1个答案

一尘不染

您将需要修改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')
2020-06-26