2

我正在尝试使用 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

4

3 回答 3

5

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

我不确定这是如何(或是否)在 Python 中公开的,但它在 Selenium wiki 的Ruby 绑定页面(在“调整 Firefox 首选项”下)中有所提及。

于 2010-12-10T16:44:29.090 回答
3

我不认为这是 WebDriver 的目标,但我会尝试一下。Firefox WebDriver 没有内置任何东西来处理这种特定情况,但您可以采取一些方法。

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

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

祝你好运

于 2010-12-09T15:15:00.150 回答
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')

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

我遇到的另一个选择是

使用 Firefox 和 Watir-WebDriver 确定要自动保存的文件 MIME 类型

我以前尝试过watir,事实证明它非常有用

于 2013-02-06T12:30:10.547 回答