求助:Linux服务器上Selenium如何复用已有Chrome实例会话
复用Linux服务器现有Chrome会话的解决方案
你的问题核心是:当前指定的user-data-dir=selenium是Selenium创建的独立目录,并非服务器上Chrome默认的用户数据存储路径,所以无法复用手动登录的会话。以下是具体解决步骤:
1. 定位Chrome默认用户数据目录
Linux环境下Chrome的默认用户数据路径:
- 普通用户:
~/.config/google-chrome/ - root用户:
/root/.config/google-chrome/
注意:使用该目录前,必须确保服务器上没有其他Chrome实例在运行——Chrome不允许多个进程共用同一个用户数据目录,否则会启动失败。
2. 修改Selenium配置指向真实目录
替换代码中user-data-dir的参数值,同时可通过profile-directory指定具体配置文件(比如默认的Default)。修改后的完整代码如下:
import sys import time import typer import requests from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as ec from selenium.webdriver.support.ui import WebDriverWait from typing import Tuple chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--window-size=1920x1080") chrome_options.add_argument("--verbose") # chrome_options.add_argument("--headless") # 替换为你的Chrome用户数据根目录 chrome_options.add_argument("--user-data-dir=/home/your_username/.config/google-chrome") # 指定使用默认配置文件 chrome_options.add_argument("--profile-directory=Default") chrome_options.add_argument("--start-maximized") driver = webdriver.Chrome(options=chrome_options) def check_and_login(): driver.get('https://*****.*****.com/#/') try: # 等待5秒,若登录框出现则执行登录 username_input = WebDriverWait(driver, 5).until( ec.presence_of_element_located((By.ID, "username")) ) username_input.send_keys("your_username") driver.find_element(By.ID, "password").send_keys("your_password") driver.find_element(By.ID, "submitButton_label").click() except: # 未检测到登录框,说明已处于登录状态 print("已登录,无需操作") if __name__ == "__main__": typer.run(check_and_login)
额外注意事项
- 若需要同时运行手动Chrome和Selenium Chrome:复制一份默认用户数据目录到新路径(比如
~/chrome-selenium-profile),让Selenium使用该副本,同时手动登录一次该副本目录的Chrome以保存会话。 - 确保运行脚本的用户对目标用户数据目录有读写权限,否则会无法加载会话数据。
- 启用headless模式时,部分网站会触发反爬机制强制登录,可尝试添加
--disable-blink-features=AutomationControlled参数规避检测,验证会话复用成功后再开启headless。
内容的提问来源于stack exchange,提问作者RJYT
相关产品推荐
相关产品推荐

