我在更改代理时遇到问题,每次加载新页面时,都会创建另一个浏览器进程。我找到了适用于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
答案 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。)