我正在尝试使用Selenium和python在尝试/放弃机械化后自动执行文件下载。我已经做了我认为我应该用硒做的一切,表格填写了他们应该做什么,按钮点击等等。但我的问题是什么都没下载。以下是我的代码的相关部分(包括firefox配置文件):
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",True)
fp.set_preference("browser.download.dir","Users/user/Downloads")
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","text/tsv")
browser = webdriver.Firefox(firefox_profile=fp)
... ...
elem=browser.find_element_by_class_name('data')
elem.send_keys(Keys.TAB)
elem.send_keys(Keys.TAB)
elem.send_keys(Keys.RETURN)
time.sleep(9.0)
我使用sleep(9.0),因为我只是在等待文件是否需要更多时间下载。我可以看到在TAB之后突出显示“提交”按钮,但之后似乎没有任何事情发生。完全迷失了。我用Google搜索了一千次,似乎无法想出任何东西。
答案 0 :(得分:1)
一般来说,下载文件选择器是操作系统的一部分,而不是浏览器,因此您无法使用selenium控制它。我看到两个解决方案:
1)以不显示OS相关对话框的方式设置firefox配置文件设置。为此,您需要将您的个人资料更改为:
fp.set_preference("browser.download.manager.showWhenStarting",False)
有关此内容的链接:http://blog.codecentric.de/en/2010/07/file-downloads-with-selenium-mission-impossible/
2)更好的解决方案是不要使用selenium下载文件。请仔细阅读这篇优秀的文章:http://ardesco.lazerycode.com/index.php/2012/07/how-to-download-files-with-selenium-and-why-you-shouldnt/基本上这意味着要在selenium之外下载文件。