无法使用Python中的selenium与对话框进行交互

时间:2014-11-20 14:41:22

标签: python firefox selenium dialog

我正在使用" Python-3.4.1 32位" on" Windows 7 64 bit"机器用" Selenium"使用" Firefox 33"。我正在尝试自动下载" CSV"提供必要的凭证后,从安全的网站提交文件。 我已经编写了所需的代码以导航到正确的元素以启动文件的下载但是当Firefox提供下载框时我被卡住了(对话框标题:打开export.csv,"打开"和& #34;将文件"选项保存为单选按钮,使用"确定"和"取消"作为按钮)。我希望自动下载该文件,为此我尝试了以下代码但没有成功:

from selenium import webdriver
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.dir", "C:\\Users\\arun\\Downloads")
fp.set_preference("browser.download.downloadDir", "C:\\Users\\arun\\Downloads")
fp.set_preference("browser.download.defaultFolder", "C:\\Users\\arun\\Downloads")
fp.set_preference('browser.helperApps.neverAsk.saveToDisk',"text/csv")
fp.set_preference("browser.helperApps.neverAsk.openFile", "CONTENT-TYPE")
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","CONTENT-TYPE")

driver = webdriver.Firefox(fp)
driver.get("http://website-url.com")

然后单击按钮开始下载。但是,它仍然显示对话框。我甚至尝试将其作为警报处理并尝试:

alert = driver.switch_to_alert()
alert.accept()

但是这总是给出了一个未找到警报的例外,这导致我得出的结论是它可能不是一个JavaScript功能,而是一个web元素。

如果没有对话框交互(在Google Chrome浏览器中处理它的方式),我该如何自动下载

感谢您的帮助和时间 干杯!

3 个答案:

答案 0 :(得分:0)

您将browser.helperApps.neverAsk.saveToDisk设置为text/csv,然后将两行设置为CONTENT-TYPE

根据this page,此首选项被解释为MIME类型列表。 CONTENT-TYPE不是有效的MIME类型,它没有其他特殊含义。您想要将第二项作业移至browser.helperApps.neverAsk.saveToDisk。您可能也不希望将作业分配到browser.helperApps.neverAsk.openFile

一旦您的browser.helperApps.neverAsk.saveToDisk设置正确,您就不必担心接受对话框了。

答案 1 :(得分:0)

Selenium不允许与对话窗口交互(例如,另存为对话框窗口)。 selenium是一个Web驱动程序,因此它只与浏览器交互。

我建议使用pywinauto和pywin32。它是Windows自动化的一种形式。

问题是selenium会在对话框窗口启动时“暂停”,所以要实现这一点,我知道的唯一方法就是编写两个脚本。第一个是selenium / web自动化过程,另一个是使用pywinauto和/或pywin32的windows自动化。

然后,您可以通过以下方式调用selenium / web自动化脚本末尾的Windows自动化脚本:

import subprocess

subprocess.call("python C:\Python27\Scripts\windowsAutomation.py", shell=True)

还有一件事,我正在使用FireFox 31

答案 2 :(得分:0)

如果其他所有方法都失败,您可以尝试使用Chrome浏览器。 Chrome不会要求下载位置,但您必须启用多个文件下载并设置保存位置