python-3.x - 即使设置了首选项,python selenium 也不会绕过 firefox 下载对话框
问题描述
我正在尝试从以下链接下载文件(市场摘要(关闭)- ZIP): https ://dps.psx.com.pk/downloads
这是我的代码:
from datetime import date
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import ElementClickInterceptedException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import time
profile = webdriver.FirefoxProfile()
profile.set_preference("browser.preferences.instantApply",True)
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/csv")
profile.set_preference("browser.helperApps.alwaysAsk.force",False)
profile.set_preference("browser.download.manager.showWhenStarting",False)
profile.set_preference("browser.download.folderList",0)
driver = webdriver.Firefox(firefox_profile=profile)
driver.get('https://dps.psx.com.pk/downloads')
start_date = driver.find_element_by_id('downloadsDatePicker')
start_date.send_keys(Keys.BACKSPACE*10)
send_date = date(2014,1,1).strftime("%Y-%m-%d")
start_date.send_keys(send_date)
driver.find_element_by_id('downloadsSearchBtn').click()
link = '/download/mkt_summary/{}.Z'.format(send_date)
time.sleep(5)
driver.find_element_by_css_selector("a[href='{}'".format(link)).click()
即使我已经设置了首选项,firefox 仍然会弹出一个下载对话框。为什么会这样,我该如何避免这种行为?
解决方案
根据您正在准备的站点和链接,您不是在下载 csv 文件,而是主要是带有 .Z 扩展名的 zip 文件。
您需要更改代码browser.helperApps.neverAsk.saveToDisk
以允许从站点收到响应,如下所示。
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")
推荐阅读
- design-patterns - 面向对象ATM设计的状态模式
- html - 如何在生成的 HTML 标记中插入角度绑定?
- python - 如何将 form.ModelForm 中的数据保存在数据库中并在模板中显示新帖子?
- android - 如何在 setOnItemLongClickListener 中实现联系人呼叫按钮?
- r - ROC曲线在斜线下方,如何修正?
- r - 在 Shiny 中调整文件输入
- javascript - 如何从使用 JavaScript 创建的动态表中打印输入值
- php - 如何在子页面上显示父摘录
- javascript - 使用 moment.js 将 Unix 时间戳转换为用户的本地时间
- c - C 中的 Valgrind 错误:使用结构、链表和指针。大小为 1 的无效读取和进程以信号 11 的默认操作终止