javascript - 使用对话框从 python 中的站点下载文件

标签 javascript python selenium urllib2 mechanize

我正在尝试对网站进行自动化测试,该网站需要填写表格并下载 Excel 表格。数据发布在 HTTP 请求中。因为它有,我使用 urllib2 使 url 工作,但是有一个 打开/保存对话框 弹出来下载工作表。

所以我开始使用可以处理此功能的 selenium,但是涉及到 javascript 函数,我无法将值传递给它。

这是我使用的日期选择器面临的问题 calendarDateInput.js 并且它的一个函数是这样使用的

 <td align="center"><script>DateInput('startDate', true, 'YYYY-MM-DD')</script> </td>

我需要通过 selenium 传递我自己的日期并试过这个:

首先我尝试了

driver.find_element_by_id("endDate_Year_ID").clear()
driver.find_element_by_id("endDate_Year_ID").send_keys("2013")

然后因为它不起作用,我求助于使用 javascript

browser.execute_script("document.getElementById('endDate_Year_ID').value = '2013'")

值没有被填充,我卡在这里

在 mechanize 或 urllib2 中是否有任何其他方法来处理对话框以保存文件或我可以在 python 中处理 javascript 的任何其他模块

我在 linux 机器上做这个测试,send_keys 对任何站点都不起作用

感谢任何帮助。谢谢

最佳答案

绕过对话框并自动下载文件,您可以在浏览器配置文件中进行此类设置。

如果使用 Firefox,您可以尝试以下设置。确保设置您的/path/to/downloads 和 Content-Type(application/download、application/octet-stream、text/csv 等)

fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.dir", '/path/to/downloads/')
fp.set_preference("browser.download.downloadDir", '/path/to/downloads/')
fp.set_preference("browser.download.defaultFolder", '/path/to/downloads/')
fp.set_preference("browser.helperApps.neverAsk.openFile", "CONTENT-TYPE")
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","CONTENT-TYPE")

然后确保将该配置文件传递给您的浏览器实例:

mydriver = webdriver.Firefox(firefox_profile=fp)

关于javascript - 使用对话框从 python 中的站点下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22031557/

相关文章:

python - Selenium Python Firefox webdriver : can't modify profile

javascript - ASP .NET 打印 iFrame

javascript - 在 react 中使用图像的最佳实践

javascript - 如何在 ios 中的 cordova 中启动 Navigator

python - VS Code 自动格式化 Python 代码以使用 2 个选项卡

python - 计算n维图像熵Python

python - 解析apache日志文件

javascript - 在 jQuery 中传递变量

python - 寻址数据帧中某个值旁边的值

c# - 等待 Selenium Webdriver 更改的最佳实践?