处理Firefox WebDriver的“下载”窗口

时间:2010-12-09 09:48:15

标签: python automation selenium webdriver

我正在尝试使用Firefox的WebDriver,我想询问是否可以处理“下载”窗口(接受或拒绝传入的下载请求)?

例如,简单的代码:

import selenium.firefox.webdriver

dr = selenium.firefox.webdriver.WebDriver()
# Firefox is showed up.

# Let's say I'd want to download python.
dr.get('http://python.org/ftp/python/3.1.3/python-3.1.3.msi')
# Download window is showed up.
# How could I accept the download request?

# As I understand, the method below should return 
# two handles but I get only main window's handle. 
handles = dr.get_window_handles()

# Seems like WebDriver cannot "see" this popup.

我已经尝试了一点,但还没有找到解决方案。我真的很感激任何提示。

非常感谢,     - V

3 个答案:

答案 0 :(得分:5)

一个解决方案是将WebDriver的Firefox配置文件更改为自动将某些MIME类型下载到给定目录。

我不确定它是如何(或者是否)在Python中公开的,但它在Selenium wiki上的Ruby bindings page上提到(在“Tweaking Firefox preferences”下)。

答案 1 :(得分:3)

我不认为这是WebDriver为此而构建的那种东西,但我会对它进行破解。 Firefox WebDriver没有内置任何处理这种特定情况的内容,但您可以采取一些方法。

您可以使用WebDriver脚本使用的配置文件打开FF,并编辑首选项以始终保存文件而不是询问(选项>应用程序> Windows Installer程序包 - 设置为“保存文件”)。但是,现在除非您被重定向到404页面,否则没有办法告诉该文件是从浏览器下载的。如果没有,您可以检查相同配置文件的下载目录中是否存在该文件(选项> Main> Donwloads)。如果它仍在下载过程中,则文件名为WhateverFileName.ext.part

您的另一个选择是使用非可视HTMLUnit驱动程序,导航到下载链接,单击它,然后获取页面源(将是文件的内容)。这适用于文本文件,我无法保证它对二进制文件的工作方式类似,也不知道在这种情况下它是如何编码的。

祝你好运

答案 2 :(得分:3)

当我尝试使用capybara下载文件时,我遇到了这个问题 并被下载提示暂停

SeleniumHQ : Selenium WebDriver

profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.dir'] = "/Downloads"
profile['browser.download.folderList'] = 2
profile['browser.helperApps.neverAsk.saveToDisk'] = "audio/wav"
driver = Selenium::WebDriver.for :firefox, :profile => profile
driver.navigate.to('http://www.address.com/file.wav')

这只是将文件下载到指定的目录中,没有提示:)

我遇到的另一个选择是

Determining file MIME types to autosave using Firefox & Watir-WebDriver

之前我曾尝试过watir并证明非常有用