在Ruby中为Selenium Chrome Driver设置代理

5

Browsermob proxy:-

https://github.com/jarib/browsermob-proxy-rb

我可以创建并设置Firefox配置文件的代理,但无法在Chrome上实现。

我不知道在Chrome中应该使用哪些选项来设置代理。

我正在使用以下代码:

对于Firefox:

require 'selenium/webdriver'
require 'browsermob/proxy'

server = BrowserMob::Proxy::Server.new("/path/to/downloads/browsermob-proxy/bin/browsermob-proxy") #=> #<BrowserMob::Proxy::Server:0x000001022c6ea8 ...>
server.start

proxy = server.create_proxy #=> #<BrowserMob::Proxy::Client:0x0000010224bdc0 ...>

profile = Selenium::WebDriver::Firefox::Profile.new #=> #<Selenium::WebDriver::Firefox::Profile:0x000001022bf748 ...>
profile.proxy = proxy.selenium_proxy

driver = Selenium::WebDriver.for :firefox, :profile => profile

proxy.new_har "google"
driver.get "http://google.com"

har = proxy.har #=> #<HAR::Archive:0x-27066c42d7e75fa6>
har.entries.first.request.url #=> "http://google.com"
har.save_to "/tmp/google.har"

proxy.close
driver.quit

对于Chrome:

require 'selenium/webdriver'
require 'browsermob/proxy'

server = BrowserMob::Proxy::Server.new("/path/to/downloads/browsermob-proxy/bin/browsermob-proxy") #=> #<BrowserMob::Proxy::Server:0x000001022c6ea8 ...>
server.start

proxy = server.create_proxy #=> #<BrowserMob::Proxy::Client:0x0000010224bdc0 ...>

profile = Selenium::WebDriver::Chrome::Profile.new #=>
profile.proxy = proxy.selenium_proxy

driver = Selenium::WebDriver.for :chrome, :prefs => profile

proxy.new_har "google"
driver.get "http://google.com"

har = proxy.har #=> #<HAR::Archive:0x-27066c42d7e75fa6>
har.entries.first.request.url #=> "http://google.com"
har.save_to "/tmp/google.har"

proxy.close
driver.quit

在Chrome中,错误会抛出在以下行:

profile.proxy = proxy.selenium_proxy

错误:- NoMethodError:undefined method `proxy =' for#

如何在Chrome驱动程序配置文件上设置代理?

1个回答

2

嘿,不确定您是否已经解决了这个问题,我遇到了同样的问题,但最终通过使用此代码使其正常工作:

require 'selenium/webdriver'
require 'browsermob/proxy'

server = BrowserMob::Proxy::Server.new("/path/to/downloads/browsermob-proxy/bin/browsermob-proxy") #=> #<BrowserMob::Proxy::Server:0x000001022c6ea8 ...>
server.start

proxy = Selenium::WebDriver::Proxy.new(:http => @proxy.selenium_proxy.http)
caps = Selenium::WebDriver::Remote::Capabilities.chrome(:proxy => proxy)
driver = Selenium::WebDriver.for(:chrome, :desired_capabilities => caps)

使用har = proxy.har命令,您可以保存har文件。

通过使用此方法,您基本上避免了Chromedriver指向错误端口和本地主机的问题。此方法也适用于IEdriver,只需更改caps即可。

Selenium::WebDriver::Remote::Capabilities.internetexplorer(:proxy => proxy)

希望这种方法能够帮到您 :)

1
这很令人困惑。你的@proxy是从哪里来的?它包含什么?我该如何构建它? - Verty00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接