编程学习网 > 编程语言 > Python > Python + Playwright 写一个自动签到脚本!
2026
10-08

Python + Playwright 写一个自动签到脚本!


每天打开掘金点「签到」领矿石,坚持三天就忘?本文带你用 Python + Playwright 从零做一个浏览器自动化签到脚本,覆盖 Cookie 持久化、page.evaluate() 直接调掘金 API、CLI 命令分发等完整流程,复制就能跑,部署到服务器还能每天定时白嫖矿石。

一、技术选型:为什么选 Playwright

市面上掘金签到方案大致三类,各有取舍:

① 纯 API 调用:速度快、无浏览器依赖,但要逆向 a_bogus 签名算法,维护成本高。

② Selenium:生态成熟、社区大,但速度慢、API 较旧、反检测能力弱。

③ Playwright(推荐):速度快、API 现代、内置反检测,代价是要下载浏览器驱动。

最终选 Playwright 的四个硬理由:① page.evaluate() 能在浏览器上下文执行 JS,直接 fetch 调 API,天然携带 Cookie 和签名,彻底规避 a_bogus 逆向;② 支持 channel="chrome" 复用系统已装的 Chrome,不用额外下 Chromium;③ 自动等待比 Selenium 显式等待优雅;④ 跨平台(Windows / macOS / Linux 通用)。

二、项目结构:单文件脚本设计

核心原则:所有逻辑集中在一个 juejin_checkin.py(约 500 行),方便 scp 部署;配置外置到 config.json;日志与 Cookie 分目录存储。先看看这份配置长什么样:

{    "headless": false,    "checkin_url": "https://juejin.cn/user/center/signin",    "home_url": "https://juejin.cn",    "cookie_file": "cookies/juejin_cookies.json",    "log_dir": "logs",    "test_rounds": 3,    "test_interval_seconds": 5,    "timeout_ms": 30000}

配置用全局 CONFIG 字典加载,各模块直接读 CONFIG["headless"]、CONFIG["test_rounds"] 等,无需层层传参。

三、Cookie 持久化:登录态的保存与加载

脚本最关键的一环是把登录态存下来——首次手动登录后保存 Cookie,以后直接加载,不用每次都扫码。两个函数搞定:

def save_cookies(context):    cookies = context.cookies()    with open(COOKIE_PATH, "w", encoding="utf-8") as f:        json.dump(cookies, f, ensure_ascii=False, indent=2)    log.info(f"Cookie 已保存 -> {COOKIE_PATH}  (共 {len(cookies)} 条)") def load_cookies(context):    if not COOKIE_PATH.exists():        return False    with open(COOKIE_PATH, "r", encoding="utf-8") as f:        cookies = json.load(f)    context.add_cookies(cookies)    log.info(f"已加载 {len(cookies)} 条 Cookie")    return True

保存用 context.cookies() 导出全部 Cookie 写盘;加载用 context.add_cookies() 注入。文件不存在就返回 False,触发一次手动登录。

四、核心 trick:page.evaluate + fetch 绕过反爬

掘金的签到接口需要 a_bogus 签名,纯手写 API 很难维护。Playwright 的 page.evaluate() 让代码在真实浏览器里跑,由浏览器自己算好签名,我们只要发一个 fetch 并带上 credentials: "include" 即可:

def api_signin(page):    # page.evaluate 在浏览器上下文执行 JS,天然携带 Cookie 与签名参数    # 彻底绕过 a_bogus 逆向    result = page.evaluate("""async () => {        const resp = await fetch(            'https://api.juejin.cn/growth_api/v1/check_in?aid=2608&uuid=1',            {                method: 'POST',                headers: { 'Content-Type': 'application/json' },                credentials: 'include',                body: JSON.stringify({})            }        );        return await resp.json();    }""")    return result def check_login(page):    result = page.evaluate("""async () => {        const resp = await fetch(            'https://api.juejin.cn/user_api/v1/user/get?aid=2608&uuid=1',            { credentials: 'include' }        );        return await resp.json();    }""")    ok = result.get("err_no") == 0 and result.get("data", {}).get("user_name")    return bool(ok)

同样的手法也用于 check_login() 验证登录态——只要 err_no == 0 且返回了 user_name,就说明 Cookie 还有效。这一招把「逆向签名」变成了「让浏览器自己签名」,维护成本直线下降。

五、CLI 主流程:login / checkin / test / status

用 sys.argv 做简单的命令分发,日常只需关心四个动作:

def main():    cmd = sys.argv[1].lower()    if cmd == "login":        interactive_login()          # 首次登录,保存 Cookie    elif cmd == "checkin":        run_once()                   # 单次签到    elif cmd == "test":        rounds = int(sys.argv[2]) if len(sys.argv) > 2 else None        multi_round_test(rounds=rounds)    elif cmd == "status":        check_cookie_valid()         # 检查 Cookie 是否仍有效    elif cmd == "help":        print_usage() # 用法# python juejin_checkin.py login     # 首次手动登录# python juejin_checkin.py checkin   # 日常签到# python juejin_checkin.py test 5    # 多轮测试# python juejin_checkin.py status    # 检查登录态

首次 login 走一遍手动扫码,之后 checkin 就能静默签到;配合服务器 crontab 或 GitHub Actions 定时跑 checkin,矿石稳定到手。注意:Cookie 长期有效但也会过期,status 可随时自检。

 小结

1. 掘金签到三方案:纯 API(逆向难)/ Selenium(慢)/ Playwright(推荐,内置反检测)。

2. Playwright 四大优势:page.evaluate 免逆向、复用系统 Chrome、自动等待、跨平台。

3. Cookie 持久化:context.cookies() 保存、add_cookies() 加载,登录态一存多用。

4. 核心技巧:page.evaluate + fetch + credentials:include,让浏览器自己算签名绕过 a_bogus。

5. CLI 四动作:login 首次登录、checkin 日常签到、test 多轮测试、status 自检登录态。

以上就是“Python + Playwright 写一个自动签到脚本!”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。   

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取