在 watir 中自动下载文件

2024-03-31

如何一键点击链接自动从浏览器下载 Excel 文件,而无需通过 watir 中的“另存为”和其他窗口。我试图保持它独立于操作系统,所以对使用 win32ole gem 不感兴趣。


为了这个任务,我调整了我的个人资料偏好

我的代码如下所示:

镀铬驱动程序:

profile = Selenium::WebDriver::Chrome::Profile.new
profile['download.default_directory'] = download_directory
profile['download.prompt_for_download'] = false
browser = Watir::Browser.new :chrome, :profile => profile

镀铬驱动程序 2:

prefs = {
    'download' => {
        'default_directory' => download_directory,
        'prompt_for_download' => false,
        'directory_upgrade' => true, 
        'extensions_to_open' => '',
    },
    'profile' => {
        'default_content_settings' => {'multiple-automatic-downloads' => 1}, #for chrome version olde ~42
        'default_content_setting_values' => {'automatic_downloads' => 1}, #for chrome newer 46
        'password_manager_enabled' => false,
        'gaia_info_picture_url' => true,
    }
}

caps = Selenium::WebDriver::Remote::Capabilities.chrome
caps['chromeOptions'] = {'prefs' => prefs}
browser = Watir::Browser.new :chrome, :desired_capabilities => caps

firefox:

profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.lastDir'] = download_directory
profile['browser.download.folderList'] = 2
profile['browser.download.dir'] = download_directory
profile['browser.download.manager.showWhenStarting'] = false
profile['browser.helperApps.alwaysAsk.force'] = false
profile['browser.helperApps.neverAsk.openFile'] = "text/csv,application/pdf"
profile['browser.helperApps.neverAsk.saveToDisk'] = "text/csv,application/pdf"
profile['pdfjs.disabled'] = true
browser = Watir::Browser.new :firefox, :profile => profile

(我的 Firefox 示例仅适用于 pdf 文件)

但是selenium浏览器下载有很多bug

chrome 或 firefox webdriver 中的一些问题(像这样http://code.google.com/p/chromedriver/issues/detail?id=130 http://code.google.com/p/chromedriver/issues/detail?id=130) 不允许为文件下载编写良好的测试

我编写了以下 ruby​​ 脚本来下载文件

require ‘rubygems’
require “net/http”
require “uri”

def download(_url, _download_path = ”)
    url = URI.parse _url
    http_object = Net::HTTP.new(url.host, url.port)
    http_object.use_ssl = true if (url.scheme == ‘https’ || url.port == 443)

    http_object.start.request_get(url.path) do |response|
        start_time = Time.now
        response["Content-Disposition"] =~ /^.+?filename=”(.+?)”$/
        file_name = $1
        file = open(_download_path + file_name, ‘wb’)
        length = response['Content-Length'].to_i
        response.read_body do |fragment|
            file.write(fragment)
        end
        file.close
        file_size = File.size(_download_path + file_name)/1024.0/1024.0
        puts “-“*80
        puts “Download time – #{Time.now – start_time}”
        puts “Download speed – #{file_size/(Time.now – start_time)} MB/s”
        puts “-“*80
    end
end

download(‘http://storagemadeeasy.com/files/1cf064a30aba6d1b8fbc0fba8ac8be5b.jpg’)

我希望这段代码对那些需要测试文件下载(不是浏览器文件下载对话框窗口)的人有用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 watir 中自动下载文件 的相关文章

随机推荐

  • 致命错误:从无效上下文调用 private MyObject::__construct()

    在 PHP 中创建新对象时 我收到以下错误消息 Fatal error Call to private MyObject construct from invalid context我只是创建新对象 而不尝试显式调用构造函数 有谁知道发生了
  • 使用嵌入文本文件中的 File.ReadAllLines

    我一直在应用迄今为止在 Bob Tabors 绝对初学者系列中学到的知识 并为我女儿编写了一个小型控制台文字游戏 需要我生成一个随机的 5 个字母单词 我以前使用过File ReadAllLines path 从我的系统上的文本文件 wor
  • 如何限制谁可以在 github 存储库上合并为 master?

    我在我的 Github 存储库上进行了设置 主分支检查 激活 以下内容的分支保护规则 合并前需要审查请求请求 所需批准审稿人 1 包括管理员 限制谁可以推送到匹配的分支 然后我面临的情况是 团队中至少有一个人必须批准 PR 然后有人才能将自
  • 将Python源代码拆分到单独的目录中?

    以下是我的公司 foo com 使用的一些各种 Python 包 com foo bar web com foo bar lib com foo zig web com foo zig lib com foo zig lib lib1 co
  • 在函数内用 $ 索引数据框?

    许多 R 教科书鼓励使用 从 data frames 检索变量 列 但是 我发现这在函数内部不起作用 我不明白为什么 data BOD print BOD These work BOD demand BOD demand This work
  • 以特定格式将数据存储在txt文件中

    我的问题与我之前的问题相关 如何以特定格式显示txt文件中的数据 https stackoverflow com questions 731917 how to display data from txt file in specific
  • jQuery UI 选项卡禁用选项卡导航

    我尝试使用禁用选项卡导航 var tabs tabs tabs select function event ui return false 但是 这也会禁用我用于导航的流链接 input nexttab click function var
  • Form.ShowDialog() 并处置

    如果我有这样的方法 public void Show Form1 f new Form1 f ShowDialog 我还需要调用 dispose 吗即使它将超出范围 也将符合垃圾回收的条件 从一些测试来看 多次调用此 Show 在某些时候
  • Chrome 84 中缩小后的图像模糊

    最近一次 Google Chrome 更新后 我网站上的 Retina 图像变得模糊 它们仍然是视网膜图像 当我在新选项卡中打开图像时 它是双倍尺寸的图像 但由于某种原因 它们看起来模糊就像非视网膜图像一样 因此 图像的缩小算法似乎有问题
  • 从 R 中的 Facet_wrap ggplot2 中删除一个级别/组

    我的 tbl df gt str p2p dt SKILL A Classes tbl dt tbl data table and data frame 693 obs of 35 variables Patch Factor w 7 le
  • 使用 C# 中的 asp.net 表单登录屏幕抓取网站?

    是否可以为受表单登录保护的网站编写屏幕抓取程序 当然 我可以访问该网站 但我不知道如何登录该网站并在 C 中保存我的凭据 此外 任何 C 屏幕截图的好例子将不胜感激 这已经完成了吗 这很简单 您需要自定义登录 HttpPost 方法 你可以
  • Angular CLI 中未显示字体精美的图标:8.2.2 而是显示正方形

    我已经安装了 Font Awesome 通过npm install save font awesome angular font awesome from https www npmjs com package angular font a
  • Kotlin 中按多个字段对集合进行排序[重复]

    这个问题在这里已经有答案了 假设我有一个人员列表 我需要先按年龄排序 然后按姓名排序 来自 C 背景的我可以通过使用 LINQ 轻松地用所述语言实现此目的 var list new List
  • 使用“AsParallel()”/“Parallel.ForEach()”指南?

    寻求一些关于利用杠杆的建议AsParallel or Parallel ForEach 以加快速度 请参阅下面我得到的方法 此示例的简化 粗制化 它需要一个类似 美国 法国 亚太地区 的列表 其中 亚太地区 可能是其他 50 个 美国 法国
  • Python 版本识别错误

    我已经开始使用 pyqtdeploy 来使用 pyqt 并制作跨平台应用程序 不幸的是 当我实际尝试启动它时 我收到错误 启动器中的致命错误 无法使用 C Python34 python exe C Python34 pyqtdeploy
  • objectify-appengine - 嵌入式类 - 不是受支持的属性类型

    我正在谷歌应用程序引擎上尝试objectify 版本2 2 3 嵌入类示例 wiki 我收到此错误 java lang IllegalArgumentException one com mypkg LevelOne is not a sup
  • YUI 圆形输入框

    是否可以使用 YUI 将我的所有输入框更改为圆角 我无法使用背景图像 因为输入的宽度是可变的 并且我无法添加围绕它们的 div 因为生成了一些输入元素 另外 我不能使用边框半径或任何 moz webkit 变体 因为它需要在 IE6 中显示
  • 如何使用 DataStax Java 驱动程序设置 Cassandra 客户端到节点加密?

    我已在 Cassandra 集群上设置了节点到节点加密 现在我想设置客户端到节点 根据本文档 http www datastax com documentation cassandra 2 0 cassandra security secu
  • Android 6.0 未经许可捕获图像

    我需要让用户使用 Android 6 0 拍照 从图库或相机应用程序 因为我不需要控制相机 所以我想使用此处描述的意图 但是 如果您不需要此类控制 则可以仅使用 ACTION IMAGE CAPTURE 意图来请求图像 当您启动意图时 系统
  • 在 watir 中自动下载文件

    如何一键点击链接自动从浏览器下载 Excel 文件 而无需通过 watir 中的 另存为 和其他窗口 我试图保持它独立于操作系统 所以对使用 win32ole gem 不感兴趣 为了这个任务 我调整了我的个人资料偏好 我的代码如下所示 镀铬