使用 Playwright 加载本地 Chrome 浏览器的 Cookie
Playwright 可以通过几种方式加载本地 Chrome 浏览器的 Cookie 和其他状态数据。以下是几种常用方法:
方法一:使用用户数据目录
最直接的方法是指定 Chrome 的用户数据目录,这样 Playwright 可以直接使用已有的配置文件、Cookie、扩展等:
from playwright.sync_api import sync_playwright def use_chrome_profile(): with sync_playwright() as p: # 指定 Chrome 用户数据目录 user_data_dir = r"C:\Users\wangbo\AppData\Local\Google\Chrome\User Data" # 启动浏览器时使用该目录 browser = p.chromium.launch_persistent_context( user_data_dir=user_data_dir, headless=False, channel="chrome" # 使用已安装的 Chrome 而不是 Playwright 内置的 Chromium ) page = browser.new_page() page.goto("https://www.baidu.com") # 此时页面应该已经包含了你的登录状态和 Cookie print("已加载本地 Chrome 配置文件") # 等待用户操作 input("按回车键继续...") browser.close() if __name__ == "__main__": use_chrome_profile()
方法二:导出 Cookie 并手动设置
如果你只需要 Cookie 而不需要完整的用户配置:
from playwright.sync_api import sync_playwright import json def set_cookies_from_file(): with sync_playwright() as p: browser = p.chromium.launch(headless=False) context = browser.new_context() page = context.new_page() # 从文件加载 Cookie with open('cookies.json', 'r') as f: cookies = json.load(f) # 设置 Cookie context.add_cookies(cookies) # 访问网站,应该已经是登录状态 page.goto('https://www.baidu.com') input("按回车键继续...") browser.close() if __name__ == "__main__": set_cookies_from_file()
方法三:使用 Chrome DevTools Protocol 直接连接到 Chrome
from playwright.sync_api import sync_playwright def connect_to_chrome(): with sync_playwright() as p: # 连接到已经运行的 Chrome 实例 # 需要先用 --remote-debugging-port=9222 启动 Chrome browser = p.chromium.connect_over_cdp("http://localhost:9222") # 获取默认上下文 default_context = browser.contexts[0] # 使用已有的页面或创建新页面 page = default_context.new_page() page.goto("https://www.baidu.com") input("按回车键继续...") browser.close() if __name__ == "__main__": connect_to_chrome()
如何从 Chrome 导出 Cookie
要使用方法二,你需要先从 Chrome 导出 Cookie。这里有一个简单的脚本:
import os import json import sqlite3 import shutil from datetime import datetime, timedelta def get_chrome_cookies(domain=None): # Chrome Cookie 数据库路径 cookie_path = os.path.join(os.environ['LOCALAPPDATA'], r'Google\Chrome\User Data\Default\Network\Cookies') # 创建临时副本以避免数据库锁定问题 temp_path = os.path.join(os.environ['TEMP'], 'chrome_cookies_temp') shutil.copy2(cookie_path, temp_path) # 连接到数据库 conn = sqlite3.connect(temp_path) conn.text_factory = str cursor = conn.cursor() # 查询条件 sql = 'SELECT host_key, name, value, path, expires_utc, is_secure, is_httponly FROM cookies' if domain: sql += f" WHERE host_key LIKE '%{domain}%'" # 执行查询 cursor.execute(sql) cookies = [] # 处理结果 for item in cursor.fetchall(): host, name, value, path, expires, secure, httponly = item # 转换为 Playwright 格式 cookie = { 'name': name, 'value': value, 'domain': host, 'path': path, 'expires': expires // 1000000 - 11644473600, # 转换 Windows 时间戳 'secure': secure == 1, 'httpOnly': httponly == 1 } cookies.append(cookie) # 关闭连接并删除临时文件 conn.close() os.remove(temp_path) # 保存到文件 with open('cookies.json', 'w') as f: json.dump(cookies, f) return cookies if __name__ == "__main__": # 可以指定域名过滤,如 "baidu.com" domain = input("输入要提取 Cookie 的域名(留空提取所有): ") cookies = get_chrome_cookies(domain if domain else None) print(f"已提取 {len(cookies)} 个 Cookie 并保存到 cookies.json")
注意事项
使用用户数据目录时,确保 Chrome 浏览器已完全关闭,否则可能会出现数据库锁定问题如果你的 Chrome 使用了自定义安装路径,需要相应调整用户数据目录路径使用方法三时,需要先用特殊参数启动 Chrome: "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222
网友回复
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?
js在浏览器中如何使用MediaStream与MediaRecorder实现声音音频多轨道混流?