如何在Watir中实现Chrome无头模式的setDownloadBehavior功能
在Watir中实现Chrome无头模式的文件下载设置
我之前刚好碰到过类似的问题,Watir本身是基于Selenium WebDriver封装的,所以我们可以直接复用Selenium方案的核心逻辑,只需要调整下获取底层驱动的方式就行。下面是适配Watir的完整实现:
def enable_watir_headless_downloads(browser, download_directory) # 从Watir的browser实例中拿到底层的Selenium Driver对象 driver = browser.driver bridge = driver.send(:bridge) # 构造Chrome DevTools命令的请求路径 command_path = '/session/:session_id/chromium/send_command' command_path[':session_id'] = bridge.session_id # 发送允许下载的DevTools命令 bridge.http.call(:post, command_path, { "cmd" => "Page.setDownloadBehavior", "params" => { "behavior" => "allow", "downloadPath" => download_directory } }) end
实际使用示例
# 初始化无头模式的Chrome浏览器 browser = Watir::Browser.new :chrome, headless: true # 设置你的目标下载目录(替换成实际路径) download_dir = File.expand_path("./my_downloads") enable_watir_headless_downloads(browser, download_dir) # 触发下载操作,比如点击页面上的下载链接 browser.link(text: "导出数据").click
为什么原Selenium方案在Watir中不生效?
因为Watir的Browser对象是对Selenium Driver的上层封装,原方案直接传入的是Watir浏览器实例,而非底层的Selenium驱动对象,自然无法执行后续的命令调用。我们只需要通过browser.driver拿到真正的Selenium Driver,就能复用原本的Chrome DevTools命令逻辑了。
内容的提问来源于stack exchange,提问作者Codeformer
相关产品推荐
相关产品推荐

