New Summary: A Python script for Huanqiu.com auto check-in. It manages login state and tries to find/click check-in/points buttons, reporting success or failure. Includes server setup links and deployment tutorial. For educational use.
阿里云:
服务器购买地址
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 HuanQiuSigner:HOME = "https://www.huanqiu.com/"STATE_PATH = Path("huanqiu_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}"),]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# 尝试点登录(环球网评论页可见"登录环球网|社交账号登录"入口)self._click_by_keywords(page, ["登录", "登录环球网", "社交账号登录", "账号登录", "立即登录"])page.wait_for_timeout(1200)print("[login] 请在打开的浏览器里手动完成登录(如出现风控/验证码请正常验证)。")input(" 登录完成后回到终端按回车继续...")context.storage_state(path=str(self.STATE_PATH))print(f"[login] 登录态已保存:{self.STATE_PATH.resolve()}")def try_checkin(self, page) -> bool:"""尝试寻找"签到/福利/任务/积分"入口:1) 先在首页/顶部找"我的/个人中心"2) 再找"福利/任务/积分/活动"3) 最后找"签到/打卡/领取""""# Step 1: 个人入口self._click_by_keywords(page, ["我的", "个人中心", "账号", "头像", "用户中心"])page.wait_for_timeout(1200)# Step 2: 福利/任务self._click_by_keywords(page, ["福利", "任务", "积分", "活动中心", "会员", "兑换"])page.wait_for_timeout(1200)# Step 3: 签到/领取clicked = self._click_by_keywords(page, ["签到", "打卡", "去签到", "立即签到", "领取", "领奖", "一键领取"], timeout_ms=4000)page.wait_for_timeout(1200)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)# 保存最新 token/cookie(避免刷新后丢失)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__":# 可视化跑,方便你看到是否有"已签到/领取成功"HuanQiuSigner(headless=False, slow_mo_ms=50).run()
该脚本为环球网自动签到脚本,主要作用包括:
打开环球网并复用登录态:首次你手动登录一次,脚本保存
huanqiu_storage_state.json,后续运行直接复用。自动探测"签到/福利/任务/积分/领取"入口:脚本会尝试点击并判断"已签到/领取成功"。
如果站点无网页端签到:会明确输出提示,而不是静默失败。
主要方法
ensure_login(page, context):进入首页 → 尝试点击"登录" → 你手动完成登录 → 保存登录态文件。try_checkin(page):依次尝试进入"我的/个人中心 → 福利/任务/积分 → 签到/领取",并根据页面文案判断是否成功。run():串流程并在结束时保存最新登录态。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论