使用undetected-chromedriver时地址栏出现代理及配置文件数据问题求助
地址栏显示user-agent及配置文件数据的原因与解决办法
问题原因
你遇到的问题是因为undetected-chromedriver(uc)对带空格的命令行参数解析逻辑和普通webdriver不同:
- 直接用
add_argument(f"user-agent={new_agent()}")传递带空格的user-agent字符串时,uc无法正确识别完整参数,会把空格后的内容误作为独立参数甚至URL的一部分,导致地址栏显示异常。 - 加载现有Chrome配置文件时,若路径或配置存在冲突,也可能触发参数异常传递。
解决办法
正确设置user-agent
不要用add_argument直接拼接带空格的user-agent,改用ChromeOptions的实验性功能设置,避免解析错误:opts.add_experimental_option("prefs", {"general.useragent.override": new_agent()})优化uc初始化配置
增加反检测设置的同时,确保参数传递规范:opts.add_experimental_option("excludeSwitches", ["enable-automation"]) opts.add_experimental_option('useAutomationExtension', False)排查配置文件问题
先注释掉配置文件相关参数,测试是否还出现异常:# opts.add_argument('--profile-directory=Profile 1') # opts.add_argument('user-data-dir=/home/sun/.config/google-chrome/')若注释后恢复正常,说明现有配置文件与uc的自动化设置存在冲突,可尝试创建新的干净配置目录使用。
修正后的完整代码示例
import random from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager import undetected_chromedriver as uc def new_agent(): agent_str = [ "Mozilla/6.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36", "Mozilla/6.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36", "Mozilla/6.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25" ] return random.choice(agent_str) class BrowserAutomation: def __init__(self): opts = uc.ChromeOptions() opts.add_argument("--disable-blink-features=AutomationControlled") opts.add_experimental_option("excludeSwitches", ["enable-automation"]) opts.add_experimental_option('useAutomationExtension', False) # 用实验性功能设置user-agent,避免空格解析问题 opts.add_experimental_option("prefs", {"general.useragent.override": new_agent()}) # 可先注释配置文件参数测试,确认无冲突后再启用 opts.add_argument('--profile-directory=Profile 1') opts.add_argument('user-data-dir=/home/sun/.config/google-chrome/') opts.add_argument("--ignore-certificate-errors") self.driver = uc.Chrome(service=Service(ChromeDriverManager().install()), options=opts) self.driver.get("https://example.com")
内容的提问来源于stack exchange,提问作者ghost239
相关产品推荐
相关产品推荐

