共计 1941 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点
开发者在移动端集成 ChatGPT 时面临两个核心问题:

-
API 成本压力 :官方 API 按 token 计费($0.002/1k tokens),普通对话按 10 轮 / 天计算,月成本约 $6,对于个人开发者或小产品难以承受
-
移动端特殊挑战 :
- 需要处理动态身份认证(如
__Secure-next-auth.session-token) - 移动网络不稳定导致长连接易中断
- 小屏幕设备的内存和 CPU 资源限制
技术方案对比
方案 A:ChatGPT-Web 模拟 API
- 原理 :部署开源项目 chatgpt-web,其内置了账号会话池
- 优点 :
- 完全兼容 OpenAI API 格式
- 支持多账号自动轮换
- 缺点 :
- 需要维护服务器(约 $5/ 月)
- 存在账号被封风险
方案 B:Playwright 自动化(推荐)
- 原理 :通过浏览器自动化工具直接操作 ChatGPT 网页版
- 优点 :
- 零服务器成本
- 绕过 API 调用限制
- 缺点 :
- 需要处理反爬机制
- 移动端适配较复杂
方案 C:Cloudflare Workers 代理
- 原理 :利用边缘函数转发请求
- 优点 :
- 无需基础设施
- 全球低延迟
- 缺点 :
- 需要定期更新会话 token
- 免费版有每日请求限额
核心实现(方案 B)
环境准备
-
安装 Playwright:
pip install playwright playwright install -
移动端设备模拟(以 Pixel 5 为例):
from playwright.sync_api import sync_playwright device = { "name": "Pixel 5", "userAgent": "Mozilla/5.0...", "viewport": {"width": 393, "height": 851}, "deviceScaleFactor": 2.75, "isMobile": True }
会话保持关键代码
def get_chatgpt_response(prompt: str) -> str:
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context(**device,
storage_state="auth.json" if os.path.exists("auth.json") else None
)
page = context.new_page()
try:
page.goto("https://chat.openai.com")
# 首次运行需手动登录
if not os.path.exists("auth.json"):
input("请登录后按回车...")
context.storage_state(path="auth.json")
# 输入问题并获取响应
page.fill("textarea[role='textbox']", prompt)
page.click("button[data-testid='send-button']")
# 等待响应完成
page.wait_for_selector("div[class*='request-:r0:']:not(:has-text(' 思考中 '))")
return page.query_selector("div[class*='response-:r1:']").inner_text()
except Exception as e:
print(f"请求失败: {e}")
return ""
finally:
context.close()
避坑指南
防封禁策略
- 每个 IP 每小时不超过 20 次请求
- 随机化操作间隔(1- 5 秒)
- 使用住宅代理 IP(如 Luminati)
移动端优化
-
网络抖动处理 :
from tenacity import retry, stop_after_attempt, wait_exponential @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10)) def safe_request(): # 包含超时设置的请求代码 -
内存管理 :
- 禁用非必要浏览器插件
- 每 10 次请求后重启浏览器实例
开放性问题
当需要支持 100+ 并发请求时,如何设计分布式方案?可能的思路:
- 使用 Redis 管理账号会话池
- 通过 RabbitMQ 分发请求
- 动态扩展 Playwright 实例(Docker+K8s)
实际测试表明,单台 4 核服务器可维持约 15 个并发会话。更优解可能是结合方案 A 和 B 的混合架构。
结语
通过浏览器自动化方案,我们在 3 个移动 App 中成功集成了 ChatGPT 功能,累计节省 API 成本超 $2000/ 月。需要注意的是,这种方法可能违反 OpenAI 服务条款,建议仅用于学习和研究场景。技术永远在博弈中进步,期待看到更优雅的解决方案出现。
正文完
