Dan*_*yan 6 ruby proxy ruby-on-rails webdriver google-chrome-headless
我正在尝试通过需要身份验证的代理使用无头 Chrome 浏览器:
require "selenium-webdriver"
options = Selenium::WebDriver::Chrome::Options.new(
args: ["headless", "proxy-server=http://#{host}:#{port}"]
)
driver = Selenium::WebDriver.for(:chrome, options: options)
Run Code Online (Sandbox Code Playgroud)
这在不需要身份验证时有效,但现在我需要通过身份验证使用它。
在“铬命令行开关一览表”我没有找到如何传递username和password正确。在谷歌我找到了这个选项,但它不起作用:
options = Selenium::WebDriver::Chrome::Options.new(
args: ["headless", "proxy-server=http://#{username}:#{password}@#{host}:#{port}"]
)
Run Code Online (Sandbox Code Playgroud)
如何通过代理身份验证使用 headless-chrome?
我已经寻找解决方案近两周了。那是2019年了,我还没弄清楚。据我所知,您无法使用用户名/密码设置代理。以前可以通过扩展,但现在这种方式不可用了。有一种方法可以使用webdrivers gem 来做到这一点:
如果您和互联网之间有代理,那么您将需要配置 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
Run Code Online (Sandbox Code Playgroud)
但是我无法让它在我的项目中工作。唯一有效的是在代理服务器上使用我的 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
Run Code Online (Sandbox Code Playgroud)
我知道我的答案不是您一直在寻找的,但也许它会以某种方式帮助您或推动您找到正确的答案。祝你好运