当前位置: 首页 > 知识库问答 >
问题:

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

应向晨
2023-03-14

我想对https://www.google.com/发出10个请求,但使用selenium和Python随机用户代理。我有一个循环,在这个循环中,我用随机的用户代理发出10个请求(使用假用户代理)。主要的问题是,对于每一个请求,web驱动程序是打开一个新的google chrome实例,我想在一个单一的实例中这样做,但与不同的用户代理。我怎样才能让这成为可能?1个谷歌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)

共有1个答案

郑琦
2023-03-14

execute_cdp_cmd():现在有了execute_cdp_cmd(cmd,cmd_args)命令,您可以使用Selenium轻松地执行google-chrome-devtools命令。使用此功能,您可以轻松地修改用户代理,以防止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
    

    即使您能够从已经启动的浏览会话中提取ChromeDriver和ChromeSession属性,例如UserAgent、会话ID、Cookies和其他会话属性,您仍然无法更改ChromeDriver的这些属性。

    更简洁的方法是在teardown(){}方法中调用driver.quit(),以优雅地关闭和销毁ChromeDriver和Chrome浏览器实例,然后使用新的配置集跨越一组新的ChromeDriver和Chrome浏览器实例。

    在这里你可以找到一个相关的讨论,我如何重新连接到webdriver用Selenium打开的浏览器?

    您可以在以下内容中找到一些相关的详细讨论:

    • 如何使用Selenium和Python更改用户代理
    • 硒WebDriver:修改Navigator.WebDriver标志以防止硒检测

  •  类似资料:
    • 问题内容: 我有一个UIViewController,我想在不同情况下禁用或启用屏幕旋转 例: 我怎样才能做到这一点? 问题答案: 我有答案。在上,如果您旋转设备,按下ViewController等,则始终调用此函数 迅速 更新 3/4 是自定义参数。 如何使用: 在Appdelegate中: 在ViewController中: 调用方法ViewDidLoad或viewWillAppear时。我们

    • 问题内容: 我想点击google结果上的第一个结果。这是我输入从csv文件读取的chennai craiglist的代码。因此,我肯定有机结果中的第一个链接将是chennai.craiglist.org。但是我很安静,不确定如何执行此操作。 我想知道这行之后会发生什么? 更新 现在我给像 我不确定它是否会起作用。 问题答案: 在你选择的是“OK”,但可能不是最好的。

    • 我正在使用Spring Security,我实现了UserDetailsService,它完美地处理了我的用户登录过程。 问题是:是否有标准的方法来检查每个请求的数据库中的用户状态,以便如果用户的帐户状态更改为“锁定”或他的角色在他仍然登录时发生更改,应用程序会阻止他继续他的工作。 这里的问题是,我的自定义UserDetailsService类中的“public UserDetails loadU

    • 问题内容: 我的网站提出了很多要求。我经常需要取消所有当前请求,以使浏览器不会阻止相关的新请求。 我有3种要求: 阿贾克斯 插入的脚本标签(执行JSONP通讯) 插入的图像标签(导致浏览器向各种服务器请求数据) 对于Ajax,它没有问题,因为XMLHttpRequest对象支持取消。我需要的是一种使所有浏览器停止从DOM对象加载资源的方法。 看起来简单地从DOM中删除对象(例如,图像标签)只会帮助

    • null 对我来说很有意义。这是入口网关将在Kubernetes集群中的每个工作节点上侦听的端口。到达那里的请求将使用入口网关CRDS路由到Kubernetes集群。 在示例中,通常被设置为匹配通信量的公共端口(http为80,https为443等)。我不明白Istio需要这个端口做什么,因为我没有看到任何流量使用Nodeport以外的任何东西。 对我来说是个谜。我已经看到了一些关于普通Istio