如何在每个请求上使用Selenium Python轮换各种用户代理

时间:2018-11-05 19:45:41

标签: python selenium selenium-webdriver webdriver selenium-chromedriver

我想向https://www.google.com/发出10个请求,但使用selenium和python的随机用户代理。我有一个循环,在该循环中,我使用随机用户代理(使用假用户代理)发出10个请求。主要问题是每个请求Web驱动程序都在打开一个新的google chrome实例,我想在一个实例中使用不同的用户代理执行此操作。我怎样才能做到这一点? 1个Google Chrome实例和10个带有10个随机用户代理的请求。这是我的代码:

chrome_options = Options()
chrome_options.add_argument('no-sandbox')
chrome_options.add_argument("--start-maximized")
ua = UserAgent()
for i in range(0, 10):
    userAgent = ua.random
    chrome_options.add_argument('--user-agent="' + str(userAgent) + '"')
    driver1 = webdriver.Chrome(chrome_options=chrome_options, 
    executable_path="C:/Python34/chromedriver")
    driver1.get('https://www.google.com/')
    time.sleep(5)

3 个答案:

答案 0 :(得分:2)

是的。现在可以使用cdp:

driver.execute_cdp_cmd("Network.enable", {})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browser1"}})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browser2"}})
driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": "browser3"}})

driver.get('https://www.httpbin.org/headers')

答案 1 :(得分:0)

它打开了10个Chrome实例,因为您没有close(),请尝试

...
...
driver1.get('https://www.whatsmyua.info/')
time.sleep(5)
driver1.close()

答案 2 :(得分:0)

。当您使用 ChromeOptions 配置 ChromeDriver 的实例以启动新的 Chrome浏览器会话时, ChromeDriver 的配置在 ChromeDriver 生存期中保持不变,并且保持不可修改。因此,当 WebDriver 实例正在执行发出10个请求的循环时,您将无法更改用户代理

即使您能够提取 ChromeDriver ChromeSession 属性,例如来自已经启动的浏览会话 UserAgent 会话ID Cookies 和其他会话属性,您仍然不会能够更改 ChromeDriver 的那些属性。

一种更干净的方法是在driver.quit()方法中调用 tearDown(){} 关闭销毁 ChromeDriver 和 Chrome浏览器实例,然后使用新的配置集跨一组新的 ChromeDriver Chrome浏览器实例

在这里您可以找到有关How can I reconnect to the browser opened by webdriver with selenium?的相关讨论