如何在Chrome驱动程序中动态更改代理

时间:2019-02-27 18:08:58

标签: python selenium

我在更改代理时遇到问题,每次加载新页面时,都会创建另一个浏览器进程。我找到了适用于Firefox的解决方案,但找不到适用于Chrome浏览器的解决方案。

self.options = webdriver.ChromeOptions()
self.options.add_argument("--start-maximized")
self.options.add_argument("--disable-popup-blocking")
self.options.add_argument('--proxy-server=%s' % 'proxy')

Firefox解决方案:Python Selenium Webdriver - Changing proxy settings on the fly

3 个答案:

答案 0 :(得分:0)

尝试类似

ChromeOptions options = new ChromeOptions();
proxy = new Proxy();
proxy.Kind = ProxyKind.Manual;
proxy.IsAutoDetect = false;
proxy.HttpProxy =
proxy.SslProxy = "127.0.0.1:3330";
options.Proxy = proxy;
options.AddArgument("ignore-certificate-errors");
var chromedriver = new ChromeDriver(options);

答案 1 :(得分:0)

我在Java / Scala中找到了一个解决方案,我发现ChromeOptions扩展了MutableCapabilities,顾名思义,它是可变的,因此我在scala中获得了以下代码,Java需要做些改动

val proxy = new org.openqa.selenium.Proxy()
val proxyStr = "127.0.0.1:1080"
proxy.setHttpProxy(proxyStr)
val option = new ChromeOptions()
option.setProxy(proxy)
chromeDriver.getCapabilities.merge(option) // will change proxy used by the driver

答案 2 :(得分:0)

经过调查,我找到了使用 Chrome 动态更改代理的解决方案(在 selenium 3.141.0 上工作)。 关键是 start_session() 方法。每次请求新网址时,您无需启动新浏览器即可启动新会话。

   proxy = get_new_proxy()     # x.x.x.x:y
   
   c = {
       "proxyType": "MANUAL",
       "httpProxy": proxy,
       "sslProxy": proxy
   }
   
   cap = webdriver.DesiredCapabilities.CHROME.copy()
   cap['proxy'] = c
   driver.start_session(cap)
   try:
       b.get('https://whatismyip.com')
   except Exception as e:
       print(e)

附言selenium.webdriver.common.proxy.Proxy.add_to_capabilities() 也可以在指定代理时使用(因此您不需要使用上面的 c dict。)