【发布时间】:2015-03-03 13:13:45
【问题描述】:
我正在尝试使用 python 中的 Selenium 模块从一个网站生成一个文本列表,将其保存在一个目录中,然后浏览到另一个网站上的该文本列表以提交它。
我正在分两部分编写脚本 - 1. 获取元数据和 2. 订购数据。我已经成功完成了第 1 部分中的脚本,除了最后一件事:选择保存刚刚生成的元数据文件。我将其单独留在第 2 部分,希望我能偶然找到答案,但当弹出选择文件出现时,我只是遇到了同样的问题。
在documentation 中,我被告知 Selenium WebDriver 内置了对处理弹出对话框的支持,并且在触发对话框后,如果我调用 alert = driver.switch_to_alert() 然后我可以“接受、关闭、阅读它内容,甚至输入提示。”
但是,它不起作用。当我尝试alert.text('some text') 或alert.send_keys(Keys.TAB) 时,我不断收到错误NoAlertPresentException: Message: No alert is present,添加等待命令后,我收到错误TimeoutException: Message:
Selenium 无法识别我收到的弹出窗口(附有屏幕截图)吗?如果是这样,我该如何与他们互动?似乎使用它来保存和/或上传文件是很多人必须做的事情,但我在谷歌上找不到任何东西。具体来说,我想为第一个图像选择“保存文件”,然后选择“确定”,第二个我想浏览到文件(即在文件名字段中输入路径)并单击“打开”。我不想只是将我的 Firefox 设置更改为自动保存,因为这最终会在不同的环境中运行,这无助于解决我的第二个问题。
谢谢!
编辑: 我正在 Windows 上测试我的脚本,但它最终将在 linux 云服务器上实现。我以为我将不得不切换到 PhantomJS webdriver(这可能会使我的问题变得更糟)来进行无头浏览,但我找到了一种保留 firefox 的方法。我想这一切意味着我无法使用 AutoIT 来解决我的问题。
【问题讨论】:
-
driver.switchto.alert(在 Java 中)我们用于 JavaScript 对话框。它们是警报框、构象框和弹出框。但是您看到的对话框不属于上述任何一种,因此您无法使用 Alert 处理。有关警报的详细说明,您可以观看视频youtube.com/watch?v=3T0YaroB2fk。您可能需要尝试 AutoIT 等来解决您的问题。
-
你可以在java中尝试类似Robot类的东西。
标签: python selenium selenium-webdriver