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

标签 python selenium selenium-webdriver webdriver selenium-chromedriver

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

最佳答案

首先更新1

execute_cdp_cmd() : 随着 execute_cdp_cmd(cmd, cmd_args) 命令的可用性,您现在可以轻松地执行 commands使用 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')
    
  • 控制台输出:

    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
    
  • 浏览器快照:

useragent

Legend: 1 - Applicable only to Selenium clients.


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

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

即使您能够提取 ChromeDriverChromeSession 属性,例如UserAgentSession IDCookies 和来自已启动的Browsing Session 的其他 session 属性,您仍然不会能够更改 ChromeDriver 的那些属性。

更简洁的方法是在 tearDown(){} 方法中调用 driver.quit()关闭destroy ChromeDriverChrome Browser 实例优雅地生成一组新的 ChromeDriverChrome 浏览器 具有一组新配置的实例。

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


引用

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

关于python - 如何在每个请求上使用 selenium python 轮换各种用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161173/

相关文章:

selenium - 如何在移动模拟模式下运行 Selenium Python?

python - Selenium Python selenium.common.exceptions.WebDriverException : Message: connection refused using geckodriver and firefox

python - 使用 wsh 从 vba 调用 python 脚本

python - 如何使用 % 格式打印浮点变量?

python - 从 SimpleITK 变换获取矩阵和平移

Selenium - 通过网格运行构建时,如何获取控制台输出?

linux - 我们可以从 Linux 终端运行 Selenium WebDriver 代码的 Jar 文件吗?如何?

java - 在 Selenium 中避免 NoSuchElementException 的最佳方法是什么?

java - 编写 jBehave 示例步骤

python - 如果我们最大化窗口,则调整小部件的大小