当前位置: 首页 > 知识库问答 >
问题:

设置默认下载目录和无头chrome

汪和悌
2023-03-14

我有一个rails应用程序,正在运行水豚

以下是我如何在我的支持/环境中设置它。rb:

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome)
end

Capybara.register_driver :headless_chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
  'chromeOptions' =>  {
    'args' => %w(headless disable-gpu window-size=1920,1080),
    'prefs' => {
      'download.default_directory' => DownloadHelpers::PATH.to_s
    }
  }
)
Capybara::Selenium::Driver.new app,
  browser: :chrome,
  #args: ["--window-size=1024,768"], #UNCOMMENT TO HAVE BROWSER WINDOW POP UP
  desired_capabilities: capabilities
end

我注意到,如果我停止

'args' => %w(headless disable-gpu window-size=1920,1080)

然后设置默认下载目录,然而,浏览器会自动弹出,我想禁用它。

当我两者都有:

    'args' => %w(headless disable-gpu window-size=1920,1080),
'prefs' => {
  'download.default_directory' => DownloadHelpers::PATH.to_s
}

它运行headless,但未设置默认下载路径。

我有以下版本:

水豚(2.14.2)

selenium webdriver(3.6.0)

chromedriver辅助程序(1.1.0)

共有2个答案

戈嘉慕
2023-03-14

如果有人遇到这种情况,我尝试使用user43395的解决方案,但无法使其工作。然而,我最终发现了这个问题——在我的特殊情况下,下载目录需要反斜杠而不是正斜杠。例如:

downloadPath: '/User/paulo/projects/app/tmp'

需要

downloadPath: '\\User\\paulo\\projects\\app\\tmp'

除此之外,他们的回答中的其他一切都很有魅力!我想把这个放在这里,以防其他人一直在努力让它无法工作。

董意蕴
2023-03-14

我曾经https://bugs.chromium.org/p/chromium/issues/detail?id=696481#c78和

将我的设置更改为:

Capybara.register_driver :selenium do |app|
  options = Selenium::WebDriver::Chrome::Options.new

  options.add_argument('--headless')
  options.add_argument('--no-sandbox')
  options.add_argument('--disable-gpu')
  options.add_argument('--disable-popup-blocking')
  options.add_argument('--window-size=1366,768')

  options.add_preference(:download, directory_upgrade: true,
                                prompt_for_download: false,
                                default_directory: 
 '/User/paulo/projects/app/tmp')

  options.add_preference(:browser, set_download_behavior: { behavior: 'allow' })

  driver = Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)

  bridge = driver.browser.send(:bridge)

  path = '/session/:session_id/chromium/send_command'
  path[':session_id'] = bridge.session_id

  bridge.http.call(:post, path, cmd: 'Page.setDownloadBehavior',
                                params: {
                                  behavior: 'allow',
                                  downloadPath: '/User/paulo/projects/app/tmp'
                            })

  driver
end

请注意,您必须将自己的下载路径。

 类似资料:
  • 问题内容: 请找到以下带有镶边功能的代码。实际上,浏览器没有将文件下载到指定的路径。 问题答案: 对于Chromedriver,请尝试: 注意:-在Windows中,您需要使用\\作为路径,而如果您使用linux或mac,则使用// 希望这可以帮助。:)

  • 我一直在处理在框架内的“下载”文件夹中下载文件。我正在使用Robot Framework,CI工具是Jenkins。 我已根据此代码配置了Base Setup Script。当我在本地执行脚本时,这可以正常工作。但是当它在Jenkins中运行时,它会给我这个错误 WebDriverException:消息:“chromeDrive”可执行文件需要在PATH中。 当我在 Jenkins 中运行它时,

  • 问题内容: 我有一堆长时间运行的脚本和应用程序,它们将输出结果存储在几个用户之间共享的目录中。我想要一种方法来确保在此共享目录下创建的每个文件和目录都自动具有权限。 我知道我可以在各种脚本的开头使用,但是我不喜欢这种方法,因为许多用户编写自己的脚本,可能会忘记自己设置umask。 我真的只希望文件系统在某个文件夹中时,以一定的权限设置新创建的文件和目录。这是可能吗? 更新 :我 认为 可以使用PO

  • 是否可以为所有xml视图的宽度和高度设置项目默认值?我的xmls中80%的项具有: Android:layout_width=“match_parent”

  • Android SDK 要求 Min Sdk Version - 使用 Glide 需要 min SDK 版本 API 14 (Ice Cream Sandwich) 或更高。 Compile Sdk Version - Glide 必须使用 API 27 (Oreo MR1) 或更高版本的 SDK 来编译。 Support Library Version - Glide 使用的支持库版本为 27

  • 问题内容: 我正在使用python-selenium和Chrome 59,并尝试自动执行简单的下载序列。当我正常启动浏览器时,下载有效,但是当我以无头模式运行时,下载不起作用。 我什至尝试添加默认路径: 在常规实现中,添加默认路径是可行的,但是无头版本仍然存在相同的问题。 如何使下载以无头模式开始? 问题答案: 是的,这是安全的“功能”。如前所述,这里是Bug讨论:https : //bugs.c