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

时间:2014-02-26 04:09:34

标签: javascript python selenium urllib2 mechanize

我正在尝试自动化测试网站,该网站有一个要填写的表单并下载excel表。数据发布在HTTP请求中。既然如此,我使用 urllib2 来获取网址,但有一个打开/保存对话框会弹出下载工作表。

所以我开始使用可以处理此功能的 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 对任何网站都不起作用

感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:1)

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

如果使用Firefox,您可以尝试以下设置。确保设置/ path / to / downloads和Content-Type(应用程序/下载,应用程序/八位字节流,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)