我想对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)
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打开的浏览器?
您可以在以下内容中找到一些相关的详细讨论:
问题内容: 我有一个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