python web crawler下载文件

时间:2012-08-23 20:13:11

标签: python selenium

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

1 个答案:

答案 0 :(得分:3)

您需要修改Firefox配置文件的首选项。为了使其停止显示该对话框,您需要设置正在使用的配置文件的browser.helperApps.neverAsk.saveToDisk属性。为此,您可以执行此操作(请注意,这适用于CSVs / Excel文件 - 我相信您的类型为'application / 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')