我正在尝试对网站进行自动化测试,该网站需要填写表格并下载 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/