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

Ars*_*lan 4 python selenium webdriver selenium-chromedriver selenium-webdriver

我想向https://www.google.com/发出 10 个请求,但使用 selenium 和 python 的随机用户代理。我有一个循环,在该循环内我使用随机用户代理(使用假用户代理)发出 10 个请求。主要问题是,对于每个请求,网络驱动程序都会打开一个新的谷歌浏览器实例,我想在一个实例中执行此操作,但使用不同的用户代理。我怎样才能使这成为可能?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)
Run Code Online (Sandbox Code Playgroud)

Deb*_*anB 5

首先更新1

execute_cdp_cmd():现在有了命令的可用性,execute_cdp_cmd(cmd, cmd_args)您可以使用Selenium轻松执行 命令。使用此功能,您可以轻松修改以防止 Selenium 被检测到。

  • 代码块:

    from selenium import webdriver
    
    driver = webdriver.Chrome(executable_path=r'C:\WebDrivers\chromedriver.exe')
    print(driver.execute_script("return navigator.userAgent;"))
    # Setting user agent as Chrome/83.0.4103.97
    driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'})
    print(driver.execute_script("return navigator.userAgent;"))
    # Setting user agent as Chrome/83.0.4103.53
    driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})
    print(driver.execute_script("return navigator.userAgent;"))
    driver.get('https://www.httpbin.org/headers')
    
    Run Code Online (Sandbox Code Playgroud)
  • 控制台输出:

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36
    
    Run Code Online (Sandbox Code Playgroud)
  • 浏览器快照:

用户代理

图例:1 - 仅适用于Selenium 客户端。


最初回答于 2018 年 11 月 6 日 8:00

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

即使您能够从已启动的浏览会话中提取ChromeDriverChromeSession属性,例如UserAgentSession IDCookies和其他会话属性,您仍然无法更改 ChromeDriver 的这些属性

一种更简洁的方法是调用driver.quit()内部tearDown(){}方法来正常关闭销毁ChromeDriver和Chrome 浏览器实例,然后使用新的配置集跨越一组新的ChromeDriverChrome浏览器实例。

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


参考

您可以在以下位置找到一些相关的详细讨论: