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

不。当您使用ChromeOptions配置ChromeDriver实例以启动新的Chrome 浏览器会话时,ChromeDriver的配置在ChromeDriver的整个生命周期内保持不变且不可编辑。因此,当WebDriver实例正在执行发出 10 个请求的循环时,您无法更改用户代理。
即使您能够从已启动的浏览会话中提取ChromeDriver和ChromeSession属性,例如UserAgent、Session ID、Cookies和其他会话属性,您仍然无法更改 ChromeDriver 的这些属性。
一种更简洁的方法是调用driver.quit()内部tearDown(){}方法来正常关闭和销毁ChromeDriver和Chrome 浏览器实例,然后使用新的配置集跨越一组新的ChromeDriver和Chrome浏览器实例。
在这里您可以找到有关How can I reconnect to the browser opening by webdriver with selenium? 的相关讨论。
您可以在以下位置找到一些相关的详细讨论:
| 归档时间: |
|
| 查看次数: |
7152 次 |
| 最近记录: |