我正在创建一个访问网站,更改代理,然后重新加载网站的机器人。我想在循环中更新chrome webdriver的代理,但是如果我用新代理创建一个新的webdriver,我只找到了一种方法。我只想更新当前的chromedriver代理,而不是用新代理创建一个新代理。
x = 1
while x < 5:
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=%s' % random.choice(PROXY))
chrome = webdriver.Chrome(chrome_options=chrome_options)
chrome.get("http://whatismyipaddress.com")
x = x + 1
此代码每次循环循环时都会创建一个新的webdriver。我该怎么做才能让它只更新当前webdriver的新代理呢?
我想要在不重新启动浏览器的情况下更改代理的原因是因为如果我重新启动我将需要输入验证码,而我不会,我只需更改代理并点击发送而无需输入验证码。
答案 0 :(得分:0)
我找到了这个解决方案,它只适用于PhantomJS
browser.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute')
browser.execute('executePhantomScript', {'script': 'phantom.setProxy('PROXY_IP', 'PROXY_PORT');', 'args' : [] })
通过参数传递代理不允许在运行时更改代理。您将不得不创建另一个webdriver实例。
答案 1 :(得分:0)
如果您使用Firefox geckodriver,则可以使用此代码
driver = = webdriver.Firefox(firefox_profile=proxy_settings, executable_path='geckodriver')
driver.refresh()
刷新允许新代理生效/不适用于chrome