这是一个基于 Playwright 的 ChatGPT 网页收发接口。它可以在同一个临时对话中反复发送消息、等待回答完成并返回文本,也可以提取回答中的 Markdown 代码块。
本项目有意不让 ChatGPT 操作本机:脚本不会启动 Codex,不执行 ChatGPT 返回的命令,不读写项目文件,也不解析回答为文件操作。脚本只通过网页输入框发送消息、读取网页回答。
为避免 Google OAuth 把 Playwright 启动的浏览器识别为“不安全的浏览器”,脚本默认连接一个由用户手动启动、手动登录的普通 Microsoft Edge:
手动启动并登录 Edge
│
│ CDP(仅监听 127.0.0.1:9222)
▼
chatgpt_WEB.py ──> ChatGPT 网页输入/输出
脚本不会启动或关闭这个 Edge。退出脚本时只断开 CDP 连接,浏览器窗口会继续保持打开。
- Windows
- Python 3.10 或更高版本
- 已安装 Microsoft Edge
- 一个可以正常登录 ChatGPT 的账号
- Python Playwright
安装依赖:
pip install playwright脚本连接本机已安装的 Edge,因此通常不需要执行 playwright install。
启动带 CDP 端口前,先关闭所有 Edge 窗口。否则 Edge 可能复用已有进程,导致远程调试参数不生效。
在 PowerShell 中执行:
$project = "D:\path\to\your\project"
$profile = Join-Path $project "chatgpt_playwright_profile"
$edge = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
Start-Process `
-FilePath $edge `
-ArgumentList @(
"--remote-debugging-port=9222",
"--user-data-dir=$profile",
"--new-window",
"https://chatgpt.com/"
)如果第一个 Edge 路径不存在,尝试:
$edge = "C:\Program Files\Microsoft\Edge\Application\msedge.exe"在打开的 Edge 中手动完成 ChatGPT 登录、人机验证和其它安全验证,直到页面可以正常聊天。
另开一个 PowerShell 窗口执行:
Invoke-WebRequest http://127.0.0.1:9222/json/version如果返回 JSON,说明 Edge 的 CDP 端口已启动。
python .\chatgpt_WEB.py如果使用 Anaconda 环境,请使用该环境的 Python,例如:
D:\path\to\your\python.exe .\chatgpt_WEB.py交互式客户端命令:
/new:创建新的 ChatGPT 临时对话/exit:退出脚本,但不关闭 Edge
from chatgpt_WEB import ChatGPTWeb
with ChatGPTWeb() as chat:
first_answer = chat.send("请用一句话解释什么是 Python 生成器")
print(first_answer)
# 同一临时对话会保留上下文
second_answer = chat.send("现在给一个最小代码示例")
print(second_answer)
# 本轮回答中的 Markdown 代码块
print(chat.last_code_blocks)ask 是 send 的别名:
answer = chat.ask("你好")创建新的临时对话:
chat.new_chat()默认连接地址为 http://127.0.0.1:9222。如使用其它端口,可以设置环境变量:
$env:CHATGPT_WEB_CDP_URL = "http://127.0.0.1:9333"也可以在 Python 中传入:
chat = ChatGPTWeb(cdp_url="http://127.0.0.1:9333")输入框和回答完成检测的超时时间可以通过构造函数参数调整:
chat = ChatGPTWeb(
start_timeout_ms=90_000,
navigation_timeout_ms=120_000,
)确认:
- 所有旧 Edge 窗口已关闭;
- Edge 是通过
--remote-debugging-port=9222启动的; Invoke-WebRequest http://127.0.0.1:9222/json/version能返回 JSON;- 脚本与 Edge 使用的是同一个端口。
不要在脚本启动的自动化浏览器中进行 Google 登录。关闭脚本后,按照上面的步骤用普通 Edge 手动登录,再重新连接。不要使用 VPN、代理、无痕窗口或反复刷新登录页。
先停止重复尝试,使用普通 Edge、稳定网络和已有登录资料完成验证。验证成功后保持 Edge 登录状态,再启动脚本。如果普通 Edge 本身也持续出现验证,通常是网络/IP 或账号风控问题,需要等待或联系服务提供方。
ChatGPT 网页 DOM 可能变化。脚本已经兼容常见的 #prompt-textarea、contenteditable 和 ProseMirror 输入框。如果仍然失败,请查看错误中的当前 URL 和页面标题,确认页面不是登录页、验证码页或错误页。
- CDP 端口只应监听
127.0.0.1,不要把9222暴露到局域网或公网。 chatgpt_playwright_profile中包含登录 Cookie 和浏览器资料,绝对不要提交到 GitHub。- 不要把账号密码、Cookie、验证码或个人隐私内容写进代码和 issue。
- 本项目使用网页界面,不是 OpenAI 官方 API;网页 DOM 或登录流程变化时,接口可能需要调整。
| 文件 | 用途 |
|---|---|
chatgpt_WEB.py |
ChatGPT 网页接口与交互式客户端 |
chatgpt_playwright_profile/ |
本地 Edge 登录资料,不应提交到仓库 |