This script automates China.com sign-in tasks. Steps: 1) Purchase cloud server (Alibaba/Tencent/Huawei). 2) Deploy Qinglong Panel. 3) Run the script: auto-login (saves session), detects/ clicks check-in buttons. Manual login first time. For learning only.
阿里云:
服务器购买地址
https://t.aliyun.com/U/G61mcO若失效,可用地址
https://www.aliyun.com/benefit?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=2019052.部署教程
3.代码如下
import refrom pathlib import Pathfrom playwright.sync_api import sync_playwright, TimeoutError as PWTimeoutErrorclass ChinaComSigner:HOME = "https://www.china.com/"PASSPORT = "https://passport.china.com/"STATE_PATH = Path("china_com_storage_state.json")def __init__(self, headless: bool = False, slow_mo_ms: int = 50):self.headless = headlessself.slow_mo_ms = slow_mo_ms@staticmethoddef _looks_logged_in(page) -> bool:"""粗判断登录态:出现'退出/我的/个人中心/账号'等字样通常代表已登录。"""html = page.content()return any(k in html for k in ["退出", "注销", "我的", "个人中心", "账号", "已登录", "欢迎"])@staticmethoddef _click_by_keywords(page, keywords, timeout_ms=3000) -> bool:"""在当前页面尝试点击包含关键词的元素(按钮/链接/文本)。命中一个即返回 True。"""for kw in keywords:locators = [page.get_by_role("button", name=re.compile(kw)),page.get_by_role("link", name=re.compile(kw)),page.locator(f"text={kw}"),page.locator(f"input[value*='{kw}']"),]for loc in locators:try:if loc.first.is_visible(timeout=timeout_ms):loc.first.click(timeout=timeout_ms)return Trueexcept Exception:continuereturn Falsedef ensure_login(self, page, context) -> None:"""打开中华网首页 -> 若未登录,引导手动登录(可能跳到通行证)-> 保存登录态"""page.goto(self.HOME, wait_until="domcontentloaded")page.wait_for_timeout(1200)if self._looks_logged_in(page):print("[login] 看起来已经登录(将直接尝试签到/福利)。")return# 尝试点击站内"登录/通行证"clicked = self._click_by_keywords(page, ["登录", "中华网通行证", "通行证", "账号登录"])page.wait_for_timeout(1000)# 如果没点到,直接打开通行证页(让你手动登录)if not clicked:page.goto(self.PASSPORT, wait_until="domcontentloaded")page.wait_for_timeout(1000)print("[login] 请在打开的浏览器里手动完成登录(如出现验证码/风控请正常验证)。")input(" 登录完成后回到终端按回车继续...")context.storage_state(path=str(self.STATE_PATH))print(f"[login] 登录态已保存:{self.STATE_PATH.resolve()}")def try_checkin(self, page) -> bool:"""自动探测"签到/福利/任务/积分/领取"入口并点击"""# 从首页开始page.goto(self.HOME, wait_until="domcontentloaded")page.wait_for_timeout(1200)# 先找"我的/个人中心"等入口(若存在)self._click_by_keywords(page, ["我的", "个人中心", "用户中心", "会员中心", "账号", "头像"])page.wait_for_timeout(1200)# 再找"福利/任务/积分/活动"self._click_by_keywords(page, ["福利", "任务", "积分", "活动中心", "兑换", "签到"])page.wait_for_timeout(1200)# 最后找"签到/打卡/领取"clicked = self._click_by_keywords(page,["立即签到", "去签到", "签到", "打卡", "领取", "领奖", "一键领取", "今日签到", "已签到"],timeout_ms=4000,)page.wait_for_timeout(1500)html = page.content()if any(k in html for k in ["已签到", "签到成功", "今日已签到", "领取成功", "已领取"]):print("[checkin] 页面显示疑似:已签到/签到成功/已领取。")return Trueif clicked:print("[checkin] 已执行点击动作,但未识别到明确成功提示;建议你肉眼确认页面状态。")return Trueprint("[checkin] 未在网页端发现明显"签到/福利/任务/积分"入口。")print(" 可能原因:1) 中华网网页端无签到;2) 签到在 App/子产品;3) 需要进入特定频道/产品页。")return Falsedef run(self) -> None:with sync_playwright() as p:browser = p.chromium.launch(headless=self.headless, slow_mo=self.slow_mo_ms)context = browser.new_context(storage_state=str(self.STATE_PATH) if self.STATE_PATH.exists() else None)page = context.new_page()try:self.ensure_login(page, context)ok = self.try_checkin(page)# 保存最新状态(cookie/token 刷新后续期)context.storage_state(path=str(self.STATE_PATH))print("[done] 结束。结果:", "已尝试签到/领奖" if ok else "未完成")except PWTimeoutError as e:print("[error] 页面等待超时:", e)finally:context.close()browser.close()if __name__ == "__main__":# 可视化运行更方便确认结果ChinaComSigner(headless=False, slow_mo_ms=50).run()
该脚本为中华网自动签到脚本,主要作用包括:
完成中华网登录态复用:首次你手动登录(通常走"中华网通行证"体系),脚本把登录态保存到
china_com_storage_state.json,后续运行免登录。自动探测并尝试"签到/福利/任务/积分/领取"入口:脚本会自动点击并尝试完成。
找不到入口会明确提示:避免脚本"跑完了但没做事"的假象。
主要方法
ensure_login(page, context):打开中华网/通行证页 → 你手动登录一次 → 保存登录态文件。try_checkin(page):从首页开始,按"个人入口 → 福利/任务 → 签到/领取"顺序做关键词点击探测。run():串起流程并在结束时保存最新登录态(防止 token 刷新后丢失)。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论