一尘不染

在python中使用硒selenium与弹出框进行交互

selenium

我正在尝试使用python中的Selenium模块从
一个网站生成文本列表,将其保存在目录中,然后浏览至另一
站点上的该文本列表以提交它。

我将脚本分为两个部分:1.获取元数据和2.订购数据。
除了最后一
件事,我已经成功完成了第1部分中的脚本:选择保存刚刚生成的元数据文件。我将其留给第二
部分工作,希望我会偶然发现答案,但是
当弹出选择文件的弹出窗口时,我只是遇到了同样的问题。

在文档中,我被告知
Selenium WebDriver内置了对处理弹出对话框的支持,并且
在触发对话框后,如果我打电话,alert = driver.switch_to_alert()我就可以“接受,关闭,阅读其内容,
甚至在提示符下键入。”

但是,它不起作用。当我尝试alert.text(‘some text’)or时
alert.send_keys(Keys.TAB),我不断收到错误消息,
NoAlertPresentException: Message: No alert is present并添加了
命令以等待,然后收到错误消息TimeoutException: Message:

Selenium无法识别我收到的弹出窗口(附带屏幕截图)吗?
如果是这样,我如何与他们互动?似乎
很多人都必须使用它来保存和/或上传文件,但是我
在Google上找不到任何东西。具体来说,我想
为第一个图像选择“保存文件”,然后选择“确定” ,对于第二个图像,我想浏览到该文件
(即在“文件名”字段中输入路径)并单击“打开”。我不想
只是将Firefox设置更改为自动保存,因为它
最终将在不同的环境中运行,而这将无助于解决我的
第二个问题。

谢谢!

编辑:我正在Windows上测试我的脚本,但最终将
在Linux云服务器上实现。我以为我将不得不切换到PhantomJS
webdriver(这可能会使我的问题更糟)来进行无头
浏览,但是我找到了一种保留firefox的方法。我想这一切都意味着我
无法使用AutoIT来解决我的问题。


阅读 458

收藏
2020-06-26

共1个答案

一尘不染

您看到的弹出式窗口不是可以使用进行交互的常规弹出式窗口
switch_to。
这些弹出窗口是系统对话框,不能使用来自动进行selenium。

通常人们会通过调整
浏览器首选项来避免首先显示这些对话框,例如:

对于上载,通常可以找到适当的输入元素,
并向其发送键以及文件路径:

如果您的情况无法解决,请使用
我随附的链接中的答案。

对于第一个“自动下载文件”问题,您只需要设置
正确的内容类型即可:

profile.set_preference('browser.helperApps.neverAsk.saveToDisk', "application/xml,text/xml")

第二个问题解决方案(上传部分):

driver.find_element_by_name("input_product_list").send_keys(textpath)
driver.find_element_by_name('include_sr').click()
driver.find_element_by_id('submit').click()
2020-06-26