使用Chrome配置文件无法自动登录网站的技术求助
问题描述
通过Selenium调用Chrome指定配置文件时,浏览器能正常识别配置(右上角显示“fb”),但无法自动登录需凭证的网站,Selenium启动的浏览器中看不到保存的密码;手动打开同一配置文件却能正常显示已保存的凭证,Chrome版本为120.0.6099.216,路径已确认正确。
解决方案
以下是针对该问题的具体修复步骤:
关闭所有Chrome进程再启动Selenium
若手动打开了目标配置的Chrome窗口,配置文件会被锁定,Selenium启动的实例无法读取完整的凭证数据。先关闭所有Chrome窗口,再通过ps aux | grep chrome检查并杀死后台残留的Chrome进程,然后重新运行代码。匹配ChromeDriver与Chrome版本
ChromeDriver版本必须和Chrome浏览器版本完全一致(包括小版本号)。当前Chrome版本是120.0.6099.216,需下载对应版本的ChromeDriver,避免版本不兼容导致的配置读取异常。添加禁用自动化检测的参数
Selenium默认会给Chrome打上自动化标识,部分浏览器安全策略会限制保存的密码加载。在配置ChromeOptions时添加以下参数:chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_argument("--disable-password-manager-reauthentication")检查配置文件路径权限
在Linux环境下,/home/name/.config/google-chrome目录的读写权限需对运行Selenium的用户开放。可通过chmod -R 755 /home/name/.config/google-chrome调整权限,确保进程能正常读取配置文件中的凭证数据。避免headless模式(如需加载密码)
headless模式下Chrome的密码管理功能存在限制,若需加载保存的密码,请勿启用--headless参数。
修改后的示例代码
def setup(): try: log.info("setting profile") driver, action = setupWebdriver(profile_path="/home/name/.config/google-chrome",profile_name="Profile 12") time.sleep(5) driver.get("https://www.facebook.com/") except Exception as e: log.error(e) return driver,action def setupWebdriver(profile_path=None,profile_name=None): '''Set up Selenium Webdriver''' chrome_options = Options() if profile_path is not None: chrome_options.add_argument(f'--user-data-dir={profile_path}') chrome_options.add_argument(f"profile-directory={profile_name}") chrome_options.add_argument("--start-maximized") # 添加修复参数 chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_argument("--disable-password-manager-reauthentication") # chrome_options.add_argument("--headless") # 加载密码时请勿启用该参数 driver=webdriver.Chrome(options=chrome_options) driver.maximize_window() action = ActionChains(driver) else: chrome_options.add_argument("--headless") #For AWS/GCP/ chrome_options.add_argument("enable-automation") chrome_options.add_argument("--window-size=1920,1080") chrome_options.add_argument("--start-maximized") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-extensions") chrome_options.add_argument("--dns-prefetch-disable") chrome_options.add_argument("--disable-gpu") driver=webdriver.Chrome(options=chrome_options) driver.delete_all_cookies() driver.maximize_window() action = ActionChains(driver) return driver,action
内容的提问来源于stack exchange,提问作者Rahul kumar Gupta

