我想向 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)
命令的可用性,您现在可以轻松地执行 google-chrome-devtools commands使用 Selenium .使用此功能,您可以修改 user-agent很容易防止 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
浏览器快照:
最初于 2018 年 11 月 6 日 8:00 回答
否。当您使用 ChromeOptions 配置 ChromeDriver 的实例以启动新的 Chrome 浏览器 session ChromeDriver 的配置在 ChromeDriver 的整个生命周期 中保持不变,并且保持不可编辑。因此,当 WebDriver 实例正在执行发出 10 个请求的循环时,您无法更改用户代理。
即使您能够提取 ChromeDriver 和 ChromeSession 属性,例如UserAgent、Session ID、Cookies 和来自已启动的Browsing Session 的其他 session 属性,您仍然不会能够更改 ChromeDriver 的那些属性。
更简洁的方法是在 tearDown(){}
方法中调用 driver.quit()
来关闭 和 destroy ChromeDriver 和 Chrome Browser 实例优雅地生成一组新的 ChromeDriver 和 Chrome 浏览器 具有一组新配置的实例。
在这里您可以找到关于 How can I reconnect to the browser opened by webdriver with selenium? 的相关讨论
引用
您可以在以下位置找到一些相关的详细讨论:
关于python - 如何在每个请求上使用 selenium python 轮换各种用户代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161173/