我正在尝试使用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
答案 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并证明非常有用