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

如何用Python将现有Chrome Cookie加载到Selenium WebDriver中

本地Chrome Cookie加载到Selenium的实现方案

Chrome 存储在本地路径C:\Users\nicoc\AppData\Local\Google\Chrome\User Data\Default\Cookie的文件是SQLite3格式数据库,且v80+版本Chrome对Cookie值做了AES加密,解密密钥存储在同目录下的Local State文件中,Windows平台可直接调用系统DPAPI接口解密密钥,完整实现逻辑如下:

第一步:安装依赖库

需要用到加密解密、Windows系统API相关依赖:

pip install pycryptodome pywin32

第二步:实现Cookie读取解密逻辑

import os
import json
import base64
import sqlite3
from win32crypt import CryptUnprotectData
from Crypto.Cipher import AES

def get_chrome_cookies():
    # 1. 读取并解密AES密钥
    local_state_path = os.path.join(os.environ['USERPROFILE'], r'AppData\Local\Google\Chrome\User Data\Local State')
    with open(local_state_path, 'r', encoding='utf-8') as f:
        local_state = json.load(f)
    encrypted_key = base64.b64decode(local_state['os_crypt']['encrypted_key'])
    # 去掉密钥前缀标记'DPAPI'
    encrypted_key = encrypted_key[5:]
    # 调用系统DPAPI解密得到可用AES密钥
    key = CryptUnprotectData(encrypted_key, None, None, None, 0)[1]

    # 2. 读取Cookie数据库(复制临时文件避免原文件被Chrome锁定无法读取)
    cookie_db_path = os.path.join(os.environ['USERPROFILE'], r'AppData\Local\Google\Chrome\User Data\Default\Cookie')
    temp_db_path = 'chrome_temp_cookie.db'
    with open(cookie_db_path, 'rb') as f_src, open(temp_db_path, 'wb') as f_dst:
        f_dst.write(f_src.read())
    
    conn = sqlite3.connect(temp_db_path)
    cursor = conn.cursor()
    cursor.execute("SELECT host_key, name, value, encrypted_value, path, expires_utc, is_secure, is_httponly FROM cookies")
    cookies = []
    for host_key, name, value, encrypted_value, path, expires_utc, is_secure, is_httponly in cursor.fetchall():
        # 解密加密的Cookie值
        if encrypted_value[:3] == b'v10' or encrypted_value[:3] == b'v11':
            nonce = encrypted_value[3:15]
            ciphertext = encrypted_value[15:-16]
            tag = encrypted_value[-16:]
            cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
            value = cipher.decrypt_and_verify(ciphertext, tag).decode('utf-8')
        # 转换为Selenium兼容的Cookie格式
        cookie_dict = {
            'domain': host_key,
            'name': name,
            'value': value,
            'path': path,
            'expiry': expires_utc / 1000000 - 11644473600 if expires_utc != 0 else None,
            'secure': bool(is_secure),
            'httpOnly': bool(is_httponly)
        }
        # 移除空有效期字段避免Selenium报错
        if cookie_dict['expiry'] is None:
            del cookie_dict['expiry']
        cookies.append(cookie_dict)
    cursor.close()
    conn.close()
    os.remove(temp_db_path)
    return cookies

第三步:挂载到Selenium实例

注意:Selenium添加Cookie前必须先访问对应域名的根地址,否则会触发域名不匹配报错:

from selenium import webdriver

driver = webdriver.Chrome()
# 先访问目标站点的根路径,比如要加载百度的Cookie就填写https://www.baidu.com
driver.get("https://目标站点的域名.com")
# 读取所有Chrome本地Cookie
all_cookies = get_chrome_cookies()
# 可选:过滤对应域名的Cookie,避免添加无关Cookie报错
target_cookies = [c for c in all_cookies if '目标站点域名关键词' in c['domain']]
for cookie in target_cookies:
    driver.add_cookie(cookie)
# 刷新页面后Cookie即可生效
driver.refresh()

注意事项

  • 运行代码前请先关闭Chrome浏览器,否则Cookie文件会被进程锁定无法读取
  • 该方案仅适用于Windows平台的Chrome v80+版本,Mac/Linux平台的密钥解密逻辑不同需要单独调整
  • 如果使用Chrome多Profile功能,需要把Cookie路径替换为对应Profile的目录路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:18:03