使用对话框在Python中从网站下载文件

3
我正在尝试自动化测试一个网站,其中有一个需要填写表单并下载 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'")

数值未被填充,我卡在这里了。

在机械臂或urllib2中是否有其他处理对话框以保存文件或任何其他模块的方式,在Python中可以处理JavaScript?

我正在Linux机器上进行此测试,并且send_keys无法在任何网站上工作。

非常感谢您的帮助。


请更具体一些。提供您正在使用的代码以及包含网站链接的信息。谢谢。 - alecxe
@alecxe:我已经更新了代码,但仍然遇到问题。 - user3291718
@alecxe:我在Linux上运行这个程序,send_keys不起作用。可能有问题吗?或者是Firefox的其他设置禁用了它?是否有其他函数可以执行这些操作? - user3291718
1个回答

1
为了“绕过对话框并自动下载文件”,您可以在浏览器配置文件中设置此类设置。
如果使用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)

谢谢您的回答,但我应该能够在开始下载之前填写表格。 - user3291718
有一个新的浏览器窗口正在打开,并设置了这些首选项,我做错了什么吗? - user3291718
不知道为什么,我有两个webdriver.Firefox()实例。应该只是mydriver = webdriver.Firefox(firefox_profile=fp)。 - chishaku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接