Playwright初始化两个浏览器

co = ChromiumOptions()
        co.headless(False)
        co.set_browser_path(r"D:\360安全浏览器\Application\360se.exe")
        co.set_user_data_path(r"d:\360安全浏览器\User Data")
        driver1 = ChromiumPage(co)
        print("dirver2")
        co2 = ChromiumOptions()
        co2.set_user_data_path(r"C:\Users\kamo\AppData\Local\Google\Chrome\User Data")
        co2.set_argument("--profile-directory=Profile 3")
        driver2 = ChromiumPage(co2)
这样初始化两个浏览器控制行不行

你想确认这样直接用 ChromiumOptions 分别配置 360 浏览器和 Chrome 浏览器、初始化两个 ChromiumPage 实例的方式是否可行,核心结论是:语法上“看起来能运行”,但实际会触发 2 个致命问题,导致要么浏览器启动失败,要么两个实例互相干扰,无法达到“独立控制两个浏览器”的目标。

先明确:为什么这样写不行?

问题1:360 浏览器路径错误(最核心)

co.set_browser_path(r"D:\360安全浏览器\Application\360se.exe") 是无效配置:

  • 360 安全浏览器的主程序 360se.exe 不是标准的 Chromium 内核可执行文件(它是 360 封装的壳程序),所有基于 Chromium 驱动的库(不管是 Playwright/Pyppeteer 还是自定义封装的 ChromiumPage)都无法识别和驱动 360se.exe
  • 必须替换为 360 浏览器内置的 Chromium 内核路径(通常是 D:\360安全浏览器\Application\ChromePlus\chrome.exe),否则 driver1 会启动失败或无响应。

问题2:方法调用错误(语法级错误)

  • co.headless(False):这是方法调用错误,headless 是属性而非方法,正确写法是 co.headless = False(赋值),否则会直接抛出 TypeError 异常;
  • co2.set_argument("--profile-directory=Profile 3"):标准的 Chromium 配置库中,添加启动参数的方法是 add_argument 而非 set_argumentset_argument 大概率是不存在的方法,会抛出 AttributeError 异常。

问题3:潜在的“实例隔离”风险(即使前两个问题修复)

如果你的 ChromiumOptions/ChromiumPage 是自定义封装,且没有做进程隔离,直接连续创建两个实例可能会:

  • 共用同一个 Chromium 进程,导致 --profile-directory=Profile 3 等参数互相覆盖;
  • 第二个浏览器实例启动时,因为端口/锁文件冲突,导致启动失败。

修正后能真正运行的版本(适配自定义 ChromiumOptions 封装)

假设你用的是基于 Playwright/Pyppeteer 封装的 ChromiumOptions/ChromiumPage,修正所有问题后的代码如下:

# 修正核心问题:路径 + 方法调用 + 隔离配置
# 配置 driver1(360 浏览器,用内置 Chromium 内核)
co = ChromiumOptions()
co.headless = False  # 修正:属性赋值,而非方法调用
# 关键:替换为 360 内置的 Chromium 内核路径
co.set_browser_path(r"D:\360安全浏览器\Application\ChromePlus\chrome.exe")
co.set_user_data_path(r"d:\360安全浏览器\User Data")
# 可选:添加隔离参数,避免和其他实例冲突
co.add_argument("--remote-debugging-port=9222")  # 给 driver1 分配独立调试端口
driver1 = ChromiumPage(co)

print("driver2")
# 配置 driver2(Chrome 浏览器,Profile 3)
co2 = ChromiumOptions()
co2.headless = False  # 统一配置非无头模式
co2.set_user_data_path(r"C:\Users\kamo\AppData\Local\Google\Chrome\User Data")
# 修正:add_argument 替代 set_argument
co2.add_argument("--profile-directory=Profile 3")
# 可选:分配独立调试端口,避免冲突
co2.add_argument("--remote-debugging-port=9223")
driver2 = ChromiumPage(co2)

关键验证:如何确认两个浏览器真的独立?

启动后可以通过以下方式验证是否达到“独立控制”的目标:

  1. 进程验证:打开任务管理器,能看到两个独立的 chrome.exe 进程(一个对应 360 内核,一个对应系统 Chrome);
  2. 操作验证:分别调用 driver1.goto("https://baidu.com")driver2.goto("https://taobao.com"),两个浏览器窗口会打开不同页面,互不干扰;
  3. 配置验证:driver2 会加载 Chrome 的 Profile 3 配置(比如书签、登录状态),driver1 加载 360 浏览器的用户数据,配置不混叠。

总结

  1. 核心结论:你原代码的思路是对的(分别配置 Options 初始化两个 Page),
  2. 可选优化:给两个实例分配不同的 --remote-debugging-port,避免进程冲突,确保完全隔离。

修正后,就能正常初始化并独立控制两个浏览器实例了。