【问题标题】:Selenium Webdriver headless chrome with proxy authentication具有代理身份验证的 Selenium Webdriver 无头 chrome
【发布时间】:2018-10-23 14:52:03
【问题描述】:

我需要在我的无头 chrome 实现中使用经过身份验证的代理。这些是在 heroku dynos 上执行的作业(如果有更好的方法可以直接在 heroku dynos 上实现代理)。

如果我遵循 selenium 的标准代理实现,我会卡在要求用户名/密码的身份验证页面。

这就是我使用 watir 和 selenium 实例化无头 chrome 实例的方式:

def headless_browser
  options = Selenium::WebDriver::Chrome::Options.new

  # make a directory for chrome if it doesn't already exist
  chrome_dir = File.join Dir.pwd, %w(tmp chrome)
  FileUtils.mkdir_p chrome_dir
  options.add_argument "--user-data-dir=#{chrome_dir}"

  # set Random User Agent
  options.add_argument "--user-agent=#{random_user_agent}"

  # let Selenium know where to look for chrome if we have a hint from
  # heroku. chromedriver-helper & chrome seem to work out of the box on osx,
  # but not on heroku.
  if chrome_bin = ENV["GOOGLE_CHROME_BIN"]
    options.add_argument "no-sandbox"
    options.binary = chrome_bin

    # give a hint to webdriver here too
    Selenium::WebDriver::Chrome.driver_path = \
      '/app/vendor/bundle/bin/chromedriver'
  end

  options.add_argument '--allow-insecure-localhost'

  # headless!
  # keyboard entry wont work until chromedriver 2.31 is released
  options.add_argument '--window-size=1200x600'
  options.add_argument '--headless'
  options.add_argument '--disable-gpu'
  options.add_argument '--no-sandbox'

  # instantiate the browser
  browser = Watir::Browser.new :chrome, options: options

  if Rails.env.development?
    browser.goto "https://api.myip.com"
    JSON.parse(Nokogiri::HTML.parse(browser.html).css('body').text)
  end
end

有谁知道如何使用 watir 和 selenium 实现经过身份验证的代理使用?我进行了很多搜索并实施了很多不同的“解决方案”,但没有一个对我有用。

  • 尝试通过 selenium 驱动程序设置代理。如果就这样离开,身份验证窗口会弹出,我无法访问。
Selenium::WebDriver::Proxy.new(
  http: '127.0.0.1:8080',
  ssl:  '127.0.0.1:8080'
)

我还尝试了 socks 格式:username:password@host:port。没用。

  • 我尝试将--proxy-server= 选项设置为驱动程序。虽然它适用于普通代理 url,但它的行为与上述相同。

【问题讨论】:

  • 您能添加您尝试过但不起作用的解决方案吗?什么是代理身份验证类型?可以通过在 URL 中添加用户/密码来绕过基本身份验证。但 NTLM 身份验证则完全不同。
  • 如果您找到了解决方案,如果您能分享一下,我将不胜感激,因为我遇到了完全相同的问题
  • 嘿@Lambasoft,不幸的是,我没弄明白。也就是说,我在 Heroku 上,并且从我的 WebDriver 分离出来作为一个微服务,在具有静态 IP 的 Digital Ocean 液滴上运行。

标签: selenium selenium-webdriver selenium-chromedriver watir google-chrome-headless


【解决方案1】:

请在您的代理设置中尝试以下代码:

proxy_object = Selenium::WebDriver::Proxy.new(
  http: '127.0.0.1:8080',
  ssl:  '127.0.0.1:8080'
)

browser = Watir::Browser.new :chrome, options: options, proxy: proxy_object

【讨论】:

  • 感谢您的回答,但这不处理代理身份验证。
猜你喜欢
  • 2022-06-10
  • 2022-08-19
  • 2013-10-18
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2017-12-09
  • 2023-03-26
  • 2020-06-09
相关资源
最近更新 更多