如何在undetected-chromedriver中配置Chrome Options并修改User-Agent
我尝试修改undetected-chromedriver驱动的Chrome浏览器User-Agent,以此模拟移动端用户。这个操作在普通ChromeDriver中能正常生效,但在undetected-chromedriver里就是不行,不知道得改哪些配置才能让它生效。
我的代码如下:
from selenium import webdriver from selenium.webdriver.chrome.service import Service import time import undetected_chromedriver.v2 as uc options = uc.ChromeOptions() options.add_argument( "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36") # s = Service('./chromedriver') # driver = webdriver.Chrome(options=options, service=s) driver = uc.Chrome(options=options) driver.get('https://www.google.com') print(driver.execute_script("return navigator.userAgent;")) time.sleep(1000000)
使用undetected-chromedriver时,打印出的User-Agent为:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
使用普通ChromeDriver时,打印出的User-Agent为:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
like Gecko) Chrome/83.0.4103.106 Safari/537.36
解决办法
undetected-chromedriver的v2版本会自动覆盖你通过options.add_argument设置的User-Agent,这是它为了绕过反爬机制做的默认操作。你可以用以下两种方式解决:
方式一:通过CDP命令修改(最可靠)
在浏览器初始化完成后,调用Chrome DevTools Protocol(CDP)命令直接修改User-Agent,这种方式不会被框架覆盖:
from selenium import webdriver import time import undetected_chromedriver.v2 as uc options = uc.ChromeOptions() driver = uc.Chrome(options=options) # 用CDP命令强制设置User-Agent 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.106 Safari/537.36" }) driver.get('https://www.google.com') print(driver.execute_script("return navigator.userAgent;")) time.sleep(1000000)
方式二:直接传入user_agent参数(部分版本支持)
有些版本的undetected-chromedriver支持在初始化uc.Chrome时直接传入user_agent参数,跳过options设置的步骤:
from selenium import webdriver import time import undetected_chromedriver.v2 as uc options = uc.ChromeOptions() # 直接在driver初始化时指定user_agent driver = uc.Chrome(options=options, user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36") driver.get('https://www.google.com') print(driver.execute_script("return navigator.userAgent;")) time.sleep(1000000)
内容的提问来源于stack exchange,提问作者Kent Wong

