watir-webdriver在保持浏览器打开的同时更改代理

我在Ruby中使用Watir-Webdriver库来检查一些页面。 我知道我可以使用代理连接

profile = Selenium::WebDriver::Firefox::Profile.new#create a new profile profile.proxy = Selenium::WebDriver::Proxy.new(#create proxy data for in the profile :http => proxyadress, :ftp => nil, :ssl => nil, :no_proxy => nil ) browser = Watir::Browser.new :firefox, :profile => profile#create a browser window with this profile browser.goto "http://www.example.com" browser.close 

但是,当想要使用不同的代理多次连接到同一页面时,我必须为每个代理创建一个新的浏览器。 加载(和卸载)浏览器需要相当长的时间。

所以,我的问题: 有没有办法改变,使用ruby中的webdriver,Firefox使用代理地址连接,同时保持浏览器打开?

如果要在通过代理服务器访问时测试页面是否被阻止,可以通过无头库进行测试。 我最近使用机械化成功了。 您也可以使用net / http。

我仍然不确定为什么需要为当前会话更改代理服务器。

 require 'Mechanize' session = Mechanize.new session.set_proxy(host, port, user, pass) session.user_agent='Mac Safari' session.agent.robots = true #observe of robots.txt rules response = session.get(url) puts response.code 

您需要提供代理主机/端口/用户/传递 (用户/传递是可选的)和URL 。 如果你得到一个例外,那么response.code可能不友好。

您可能需要使用操作系统级别的自动化工具来自动执行FF菜单以更改用户的设置。

对于Windows用户,可以选择新的RAutomation工具或AutoIT。 两者都可用于在OS UI级别自动执行操作,这样您就可以进入浏览器设置并在那里更改代理。

我仍然认为,如果你检查更多的网站,那么与所有网站导航和等待网页加载等相比,更改代理设置的开销不会那么多。

除非您当前正在采用“行遍历”方法并为您检查的每个站点多次更改代理设置? 如果是这种情况,我将采用更多的逐列方法(如果我们假设每列是代理,每行是一个站点)并启动浏览器以获取一个代理,检查所有站点,然后更改代理并重新检查所有网站。 这样,您只需为每个代理更改一次代理设置,这不会给脚本增加太多开销。

这可能意味着更多的工作是存储,然后在结束时报告结果(如果你一次将它们写成一行),但这就是哈希或数组的用途。