2026年1月27日星期二

ZOL Forum Auto Check-In Script Guide

Summary: This script automates daily check-ins for ZOL Forum (bbs.zol.com.cn). It uses Playwright with cookie-based login. Steps: 1. Manually log in once to export cookies. 2. Schedule script to auto-load cookies, access forum, find/click check-in buttons, detect success messages, and save screenshots.

1.购买服务器

阿里云:

服务器购买地址

https://t.aliyun.com/U/kcPAeY

若失效,可用地址

https://www.aliyun.com/daily-act/ecs/activity_selection?source=5176.29345612&userCode=49hts92d

腾讯云:

https://curl.qcloud.com/wJpWmSfU

若失效,可用地址

https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console

华为云

https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905

2.部署教程

2024年最新青龙面板跑脚本教程(一)持续更新中

3.代码如下

# -*- coding: utf-8 -*-
import jsonimport sysimport timeimport argparsefrom datetime import datetimefrom pathlib import Path
from playwright.sync_api import sync_playwright, TimeoutError as PWTimeout
BASE_URL = "https://bbs.zol.com.cn/"COOKIE_FILE = Path("zol_bbs_cookies.json")SCREENSHOT_DIR = Path("screenshots_zol")SCREENSHOT_DIR.mkdir(exist_ok=True)
# 常见"签到/任务/领奖"入口文案CHECKIN_KEYWORDS = [    "签到""打卡""每日签到""立即签到""去签到",    "领取""领奖""领积分""积分""任务""任务中心",    "福利""活动"]
SUCCESS_HINTS = [    "签到成功""已签到""今日已签到""打卡成功""领取成功""已领取""您已签到"]

def now_str():    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

def log(msg: str):    print(f"[{now_str()}{msg}")

def human_wait(min_s=0.8, max_s=1.6):    time.sleep((min_s + max_s) / 2)

def screenshot(page, name: str):    p = SCREENSHOT_DIR / f"{datetime.now().strftime('%Y%m%d_%H%M%S')}_{name}.png"    page.screenshot(path=str(p), full_page=True)    log(f"📸 已截图:{p.resolve()}")

def save_cookies(context, path: Path):    cookies = context.cookies()    path.write_text(json.dumps(cookies, ensure_ascii=False, indent=2), encoding="utf-8")    log(f"✅ Cookie 已保存:{path.resolve()}(共 {len(cookies)} 条)")

def load_cookies(context, path: Path):    if not path.exists():        raise FileNotFoundError(f"未找到 Cookie 文件:{path.resolve()},请先运行 --export 手动登录导出一次")    cookies = json.loads(path.read_text(encoding="utf-8"))    context.add_cookies(cookies)    log(f"✅ Cookie 已加载:{path.resolve()}(共 {len(cookies)} 条)")

def ensure_logged_in(page) -> bool:    """    ZOL论坛登录态粗判:出现"退出/消息/我的/个人中心"等通常说明已登录    """    hints = ["退出""消息""我的""个人中心""设置""私信""通知"]    for h in hints:        try:            if page.get_by_text(h, exact=False).first.is_visible(timeout=1500):                return True        except Exception:            pass    return False

def try_click_by_text(page, text: str, timeout_ms=2500) -> bool:    """    根据可见文本尝试点击按钮/链接/文本节点    """    candidates = [        page.get_by_role("button", name=text),        page.get_by_role("link", name=text),        page.get_by_text(text, exact=False),    ]    for locator in candidates:        try:            if locator.first.is_visible(timeout=timeout_ms):                locator.first.click(timeout=timeout_ms)                return True        except Exception:            continue    return False

def detect_success(page) -> bool:    """    检测是否出现"已签到/签到成功"等提示    """    for sh in SUCCESS_HINTS:        try:            if page.get_by_text(sh, exact=False).first.is_visible(timeout=1200):                log(f"✅ 检测到成功提示:{sh}")                return True        except Exception:            pass    return False

def do_checkin(page, max_rounds=3) -> bool:    """    自动签到核心流程:多轮尝试点击"签到/打卡/任务/领取"等入口,并检测成功提示    """    for r in range(1, max_rounds + 1):        log(f"🔎 第 {r}/{max_rounds} 轮:寻找签到入口…")
        # 1) 优先按关键词点(命中率高)        clicked = False        for kw in CHECKIN_KEYWORDS:            if try_click_by_text(page, kw):                clicked = True                log(f"👉 已点击入口:{kw}")                human_wait(1.01.8)                break
        # 2) 若没点到:扫描页面可见 a/button 文本进行关键词匹配(兜底)        if not clicked:            log("⚠️ 未直接命中入口,开始扫描可见链接/按钮做关键词匹配…")            try:                nodes = page.locator("a:visible, button:visible").all()                for node in nodes[:350]:                    try:                        t = (node.inner_text() or "").strip()                        if not t:                            continue                        if any(k in t for k in CHECKIN_KEYWORDS):                            node.click()                            clicked = True                            log(f"👉 扫描命中并点击:{t[:30]}")                            human_wait(1.01.8)                            break                    except Exception:                        continue            except Exception as e:                log(f"⚠️ 扫描元素异常:{e}")
        # 3) 检测是否成功        if detect_success(page):            return True
        # 4) 有些站点点击后会跳转/弹层,需要多走几轮        if clicked:            human_wait(1.22.2)        else:            human_wait(0.81.2)
    return False

def export_cookie_flow(headless: bool):    """    手动登录并导出 Cookie    """    with sync_playwright() as p:        browser = p.chromium.launch(headless=headless)        context = browser.new_context()        page = context.new_page()
        log(f"🌐 打开:{BASE_URL}")        page.goto(BASE_URL, wait_until="domcontentloaded", timeout=60000)
        log("请在浏览器中手动完成登录(账号/短信/扫码等),登录完成后回到终端按回车保存 Cookie…")        input()
        if ensure_logged_in(page):            log("✅ 检测到登录态,准备保存 Cookie")        else:            log("⚠️ 未明显检测到登录态,但仍会保存 Cookie(如后续失败请重新导出)")
        save_cookies(context, COOKIE_FILE)        screenshot(page, "export_cookie_done")
        context.close()        browser.close()

def auto_checkin_flow(headless: bool) -> int:    """    自动签到主流程:加载 Cookie -> 打开首页 -> 尝试签到 -> 成功/失败截图    返回码:      0 = 成功(或检测到已签到)      1 = 未检测到成功提示(可能入口变了/风控/需要验证码)      2 = 未登录(Cookie失效)    """    with sync_playwright() as p:        browser = p.chromium.launch(headless=headless)        context = browser.new_context()        load_cookies(context, COOKIE_FILE)
        page = context.new_page()        log(f"🌐 进入:{BASE_URL}")        page.goto(BASE_URL, wait_until="domcontentloaded", timeout=60000)        human_wait(1.02.0)
        if not ensure_logged_in(page):            screenshot(page, "not_logged_in")            log("❌ 可能未登录(Cookie 失效或未正确导入)。请重新运行 --export 导出 Cookie")            return 2
        try:            ok = do_checkin(page, max_rounds=3)        except PWTimeout:            log("⚠️ 页面等待超时")            ok = False        except Exception as e:            log(f"⚠️ 签到过程异常:{e}")            ok = False
        if ok:            screenshot(page, "checkin_success")            log("🎉 自动签到流程执行完成:疑似成功/已签到")            return 0        else:            screenshot(page, "checkin_failed")            log("❌ 未检测到成功提示:可能需要更新入口关键词/遇到验证码/风控拦截")            return 1

def main():    parser = argparse.ArgumentParser(description="ZOL论坛(bbs.zol.com.cn)自动签到脚本(Cookie方式)")    parser.add_argument("--export", action="store_true"help="手动登录并导出 Cookie")    parser.add_argument("--headless", action="store_true"help="无头模式运行(默认有头,方便首次登录)")    args = parser.parse_args()
    if args.export:        export_cookie_flow(headless=args.headless)        return 0    else:        return auto_checkin_flow(headless=args.headless)

if __name__ == "__main__":    sys.exit(main())
解析

该脚本为中关村论坛自动签到脚本,主要作用包括:

  • 首次人工登录一次并导出 Cookie 到 zol_bbs_cookies.json

  • 后续定时执行脚本时:自动加载 Cookie → 打开 https://bbs.zol.com.cn/ → 自动寻找并点击"签到/打卡/任务/领取"等入口 → 检测"已签到/签到成功"提示 → 截图留证成功/失败都截图)

主要方法

  • export_cookie_flow() → 打开论坛首页,等待你手动登录,然后导出 Cookie 保存到本地文件。

  • auto_checkin_flow() → 自动签到总流程:加载 Cookie、访问首页、判断登录态、执行签到、截图并返回退出码。

  • do_checkin() → 多轮尝试寻找"签到/任务/领取"等入口并点击,然后检测是否出现成功提示。

  • try_click_by_text() → 按文本定位可点击元素并点击,提高在页面结构变动下的通用性。

  • ensure_logged_in() → 通过页面常见"我的/消息/退出"等关键词,粗判断是否处于登录状态。

  • detect_success() → 检测页面是否出现"已签到/签到成功"等结果提示。

  • save_cookies() → 将当前浏览器上下文的 Cookie 导出保存为 JSON 文件。

  • load_cookies() → 从 JSON 文件读取 Cookie 并注入浏览器上下文,实现免登录访问。

  • screenshot() → 成功/失败都截图保存,便于排查入口变化或验证码/风控问题。

  • human_wait() → 增加固定等待,模拟正常用户操作节奏,降低"点击太快"导致的失败概率。


注意

本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。


历史脚本txt文件获取>>
服务器搭建,人工服务咨询>>

没有评论:

发表评论

ZOL Forum Auto Check-In Script Guide

Summary: This script automates daily check-ins for ZOL Forum (bbs.zol.com.cn). It uses Playwright with cookie-based login. Steps: 1. Manuall...