如何在无头铬红宝石中进行代理身份验证?

问题描述 投票:2回答:1

我正在尝试通过需要身份验证的代理使用无头chrome浏览器。

require "selenium-webdriver"

options = Selenium::WebDriver::Chrome::Options.new(
      args: ["headless", "proxy-server=http://#{host}:#{port}"]
    )
driver = Selenium::WebDriver.for(:chrome, options: options)

这在不需要身份验证时有效。但是现在我需要使用它进行身份验证。

this documentation中,我没有找到如何正确传递用户名密码的方法。在Google中,我找到了此选项,但是它不起作用:

options = Selenium::WebDriver::Chrome::Options.new(
      args: ["headless", "proxy-server=http://#{username}:#{password}@#{host}:#{port}"]
    )

所以您能帮我如何通过代理身份验证使用headless-chrome吗?

谢谢

ruby-on-rails ruby proxy webdriver google-chrome-headless
1个回答
0
投票

我一直在寻找解决方案将近2周。那是在2019年,我什至还没有弄清楚。据我所知,您不能使用用户名/密码设置代理。以前可以使用扩展名,但是现在这种方法不可用。有一种使用webdrivers gem的方法:如果您和Internet之间存在代理,则需要配置gem以使用代理。您可以通过调用configure方法来执行此操作。

Webdrivers.configure do |config|
  config.proxy_addr = 'myproxy_address.com'
  config.proxy_port = '8080'
  config.proxy_user = 'username'
  config.proxy_pass = 'password'
end

但是我无法在我的项目中使用它。唯一有效的方法是在代理服务器上用我的IP设置白名单,因此我不需要设置用户名/密码。因此,它无需凭据即可工作,仅如下所示:

    Capybara.register_driver :headless_chrome do |app|
      client = Selenium::WebDriver::Remote::Http::Default.new
      client.read_timeout = 60
      capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
        'goog:chromeOptions' => { args: %w[no-sandbox headless disable-gpu disable-dev-shm-usage
                                           window-size=1280,1024 enable-features=NetworkService,NetworkServiceInProcess] },
        'loggingPrefs' => { browser: 'ALL', client: 'ALL', driver: 'ALL', server: 'ALL' }
      )
      capabilities['goog:chromeOptions'][:args] << "user-agent=#{user_agent}" if user_agent
      capabilities['goog:chromeOptions'][:args] << "proxy-server=http://#{proxy[:ip]}:#{proxy[:port]}" if proxy

      Capybara::Selenium::Driver.new(app, browser: :chrome, desired_capabilities: capabilities, http_client: client)
    end

我知道我的答案不是你一直在寻找,但也许它将以某种方式帮助您或推动您正确答案。祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.