我正在尝试使用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来解决我的问题。
您看到的弹出式窗口不是可以使用进行交互的常规弹出式窗口 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()