ruby - 带有 Selenium 的 Chromedriver 远程调试端口

标签 ruby selenium selenium-chromedriver google-chrome-headless

我正在使用 Capybara Selenium 运行 headless Chrome,效果很好,但我不知道如何使用远程调试。当我添加 --remote-debugging-port=4444--remote-debugging-port=9222--remote-debugging-port=9521,Selenium 不再连接浏览器运行测试。

如何进行远程调试?这是我的代码供引用:

Capybara.register_driver :selenium do |app|
  # from https://github.com/SeleniumHQ/selenium/issues/3738
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(loggingPrefs: {browser: 'ALL'})
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument '--disable-infobars' # hide info bar about chrome automating test
  # if we don't use this flag, every selenium test will die with the error:
  # "unknown error: Chrome failed to start: exited abnormally"
  options.add_argument '--no-sandbox'
  # BREAKS THINGS if uncommented
  # options.add_argument '--remote-debugging-port=4444'
  options.add_argument '--headless'
  options.add_argument '--window-size=1600,2400'
  options.add_preference('profile.default_content_settings.popups', 0)
  options.add_preference('download.default_directory', DownloadHelpers::PATH.to_s)
  Capybara::Selenium::Driver.new(
    app,
    clear_local_storage: true,
    clear_session_storage: true,
    browser: :chrome,
    options: options,
    desired_capabilities: capabilities,
  )
end

最佳答案

chrome 67 and chromedriver 2.39 ,chromedriver 现在可以正确使用您通过 --remote-debugging-port 指定的端口。这消除了相当多的复杂性 from my answer above .我现在采取的步骤适用于我需要使用 chrome_remote 配置下载设置的用例, 如下:

它使用了一个 nodejs 库,crmux - 允许多个客户端同时连接到 chrome 的远程调试端口。

  1. 首先安装 nodejs:Nodejs v9.7.0工作正常
  2. 通过运行 npm install crmux -g
  3. 安装 crmux
  4. 在启动 chromedriver (Capybara::Selenium::Driver.new) 之前,您需要生成一个单独的线程这将启动 crmux,这将让您和 chromedriver 通过 Capybara (4444) 中指定的端口you 与 chrome 本身进行通信:

    crmux --port=4444 --listen=4444

  5. 您可能希望在主脚本/线程中的 spawn 命令之后添加一个 sleep 3,以便在继续您的操作之前为 crmux 的启动留出时间测试启动。

然后您可以使用 chrome_remote (例如)使用端口 4444 访问 chrome,而 capybara 正在做它的事情。

关于ruby - 带有 Selenium 的 Chromedriver 远程调试端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49015203/

相关文章:

selenium - [ Selenium 网格] : Unable to launch Robot tests on remote machine

google-chrome - java.lang.NoSuchMethodError : com. google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder;通过 ChromeDriver 启动 Chrome 时

java - 如何在 Java Selenium 中禁用 Chrome 实验选项 Same-site-by-default-cookies?

ruby-on-rails - Ruby 的 .where 与检测

ruby - 查找卡普雷卡的电话号码

Ruby 变量管理问题

python - 无法在 Python 3 中的 Selenium 上设置 Luminati 代理

java - Java 中 RUBY 的等价物 has_many 和 belongs_to 关系

java - 将启用工作和测试的 Selenium 键盘操作

ruby - watir-webdriver 忽略错误如何