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

如何解决Python+Selenium多实例运行时的Cookie SQLite Error 1555?

解决多实例并发运行时Cookie SQLite唯一约束冲突问题

这个问题我之前帮朋友排查过类似的,核心原因是多个实例同时读写同一个Cookie数据库文件,SQLite本身对高并发写入的支持很差,直接触发了唯一约束冲突——你看到的UNIQUE constraint failed: cookies.creation_...就是最直接的证据。单个实例运行时没有竞争,自然没问题,但20个实例共享同一个用户数据目录(包括Cookie数据库)就会撞车。

下面给你几个可行的解决方案,按推荐优先级排序:

1. 给每个实例分配独立的用户数据目录(最优方案)

这是最彻底的解决办法,让每个实例拥有完全独立的Cookie存储,从根源上避免竞争。

如果你用的是Chrome/Chromium内核的自动化工具(比如Playwright、Selenium with ChromeDriver),只需要在启动参数里指定不同的--user-data-dir路径就行。举个Python+Playwright的示例:

from playwright.sync_api import sync_playwright
import os

# 循环创建20个独立实例
for instance_id in range(20):
    # 为每个实例生成唯一的配置目录
    profile_dir = f"./auto-profiles/profile-{instance_id}"
    os.makedirs(profile_dir, exist_ok=True)
    
    # 启动带独立配置的浏览器上下文
    browser_context = sync_playwright().start().chromium.launch_persistent_context(
        user_data_dir=profile_dir,
        headless=False,
        args=["--no-sandbox"]
    )
    
    # 执行你的登录、跳转逻辑
    page = browser_context.new_page()
    page.goto("你的目标网站地址")
    # ... 后续登录操作

每个实例的Cookie数据库完全隔离,再也不会出现写入冲突。

2. 使用隐身模式(临时快速方案)

如果不需要持久化Cookie(每次实例启动都可以重新登录),可以直接用隐身模式启动实例。隐身模式下,每个实例的Cookie都是临时内存存储,不会写入到共享的SQLite数据库,自然不会有冲突。

比如在Playwright里:

browser = sync_playwright().start().chromium.launch()
# 每个实例创建独立的隐身上下文
context = browser.new_context(incognito=True)
page = context.new_page()

Selenium的ChromeOptions也可以添加--incognito参数实现同样效果。

3. 加锁控制Cookie写入(不推荐,仅特殊场景用)

如果必须共享Cookie数据,那只能在代码里实现进程锁,确保同一时间只有一个实例在写入Cookie数据库。但这种方法会大幅降低多实例的并行效率,实现起来也复杂,除非有特殊业务需求,否则不建议用。

补充:你看到的Cookie sqlite error 1555就是SQLite的SQLITE_CONSTRAINT_UNIQUE错误,完全匹配多进程并发写入冲突的场景,用独立用户目录的方案应该能直接解决问题。

内容的提问来源于stack exchange,提问作者Otaku Wiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:25:21