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_argument,set_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)
关键验证:如何确认两个浏览器真的独立?
启动后可以通过以下方式验证是否达到“独立控制”的目标:
- 进程验证:打开任务管理器,能看到两个独立的
chrome.exe进程(一个对应 360 内核,一个对应系统 Chrome); - 操作验证:分别调用
driver1.goto("https://baidu.com")和driver2.goto("https://taobao.com"),两个浏览器窗口会打开不同页面,互不干扰; - 配置验证:driver2 会加载 Chrome 的 Profile 3 配置(比如书签、登录状态),driver1 加载 360 浏览器的用户数据,配置不混叠。
总结
- 核心结论:你原代码的思路是对的(分别配置 Options 初始化两个 Page),
- 可选优化:给两个实例分配不同的
--remote-debugging-port,避免进程冲突,确保完全隔离。
修正后,就能正常初始化并独立控制两个浏览器实例了。