You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已有Chrome窗口运行时Selenium启动崩溃的解决求助

问题分析与解决方法

问题根源

Chrome的用户配置目录(User Data)同一时间只能被一个Chrome进程独占锁定。当你手动打开的Chrome已经在使用指定的配置文件时,Selenium启动的新Chrome实例无法获取该目录的访问权限,进而触发DevToolsActivePort file doesn't exist错误。无头模式下Chrome默认使用临时配置目录,因此不会出现冲突。

解决方法

方法一:使用独立的Selenium专用配置目录(推荐)

复制现有Chrome配置文件夹,让Selenium使用独立副本,彻底避免冲突:

  1. 找到你的Chrome用户数据目录(通常是C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data)
  2. 复制整个User Data文件夹到新路径,比如C:\Users\Guy\ChromeSeleniumData
  3. 修改代码中的user_data_dir参数为这个新路径,profile_name保持不变:
bot = Bot(driverpath=PATH.EXEFile_chromedriver_v111,
          datadir=PATH.DIR_data,
          user_agent=SETUPCONFIG.constant.chrome_user_agent,
          user_data_dir=r"C:\Users\Guy\ChromeSeleniumData",  # 替换为复制后的新路径
          profile_name=SETUPCONFIG.constant.chrome_profile_name,
          headless=False)

方法二:指定远程调试端口强制隔离实例

如果不想复制配置,可以通过指定独立调试端口来避免端口冲突(但仍需确保配置目录未被手动Chrome占用,或仅在必要时使用):
在create_options方法中添加以下参数:

@staticmethod
def create_options(**kwargs) -> Options:
    options = Options()
    options.headless = kwargs.get('headless', False)
    if not (user_data_dir := kwargs.get("user_data_dir")) is None and os.path.isdir(user_data_dir):
        if not (profile := kwargs.get('profile_name')) is None and os.path.isdir(f'{user_data_dir}\\{profile}'):
            options.add_argument(f"--user-data-dir={user_data_dir}")
            options.add_argument(f'--profile-directory={profile}')
    
    # 添加这两行参数
    options.add_argument('--remote-debugging-port=9222')  # 指定任意未被占用的端口
    options.add_argument('--no-first-run')  # 跳过首次运行初始化
    
    # 其余原有参数保持不变
    if not (user_agent := kwargs.get("user_agent")) is None:
        options.add_argument(f'--user-agent={user_agent}')
    options.add_argument('start-maximized')
    options.add_argument('--ignore-certificate-errors')
    # ... 省略其他原有参数
    return options

方法三:连接到已运行的Chrome实例

如果希望Selenium直接控制你手动打开的Chrome窗口,可通过远程调试实现:

  1. 关闭所有Chrome窗口
  2. 右键Chrome快捷方式,在「目标」栏末尾添加 --remote-debugging-port=9222,示例:
    "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
    
  3. 启动Chrome,此时它会监听9222端口
  4. 修改Selenium代码,连接到该实例(无需指定user_data_dir和profile_name):
def test():
    os.system('cls')
    options = Options()
    options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
    bot = webdriver.Chrome(service=Service(PATH.EXEFile_chromedriver_v111), options=options)
    input('press any key to continue...')

内容的提问来源于stack exchange,提问作者Michael Archman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:44:53