Summary: A script automates daily check-in on hongxiu.com. It uses saved login state after initial manual login, navigates to rewards/tasks section via keyword matching, and attempts to click check-in buttons. It outputs success status.
阿里云:
服务器购买地址
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 HongXiuSigner:HOME = "https://www.hongxiu.com/"STATE_PATH = Path("hongxiu_storage_state.json")def __init__(self, headless: bool = False, slow_mo_ms: int = 50):self.headless = headlessself.slow_mo_ms = slow_mo_ms@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 False@staticmethoddef _looks_logged_in(page) -> bool:"""粗判断登录态:页面出现"退出/我的/个人中心/消息/书架/账号"等字样通常表示已登录"""html = page.content()return any(k in html for k in ["退出", "我的", "个人中心", "消息", "书架", "账号", "已登录"])def ensure_login(self, page, context) -> None:"""打开首页 -> 若未登录,引导手动登录 -> 保存登录态"""page.goto(self.HOME, wait_until="domcontentloaded")page.wait_for_timeout(1000)if self._looks_logged_in(page):print("[login] 看起来已处于登录状态。")return# 尝试点击"登录/立即登录"self._click_by_keywords(page, ["登录", "立即登录", "账号登录", "登录/注册", "注册/登录"])page.wait_for_timeout(1000)print("[login] 请在打开的浏览器中手动完成登录(如出现验证码/风控请正常验证)。")input(" 登录完成后回到终端按回车继续...")# 保存最新登录态context.storage_state(path=str(self.STATE_PATH))print(f"[login] 登录态已保存:{self.STATE_PATH.resolve()}")def do_checkin(self, page) -> bool:"""尝试在网页端完成"签到/福利/任务/领奖"- 先尝试去"我的/个人中心"- 再尝试"福利/任务/活动/积分"- 最后点"签到/打卡/领取/领奖""""# 1) 先找"我的/个人中心"self._click_by_keywords(page, ["我的", "个人中心", "用户中心", "账号", "头像"])page.wait_for_timeout(1200)# 2) 再找"福利/任务/活动"self._click_by_keywords(page, ["福利", "任务", "活动中心", "积分", "领奖", "新手福利"])page.wait_for_timeout(1200)# 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] 未找到"签到/福利/任务/领奖"入口(可能网页端无签到,或入口在 App)。")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.do_checkin(page)# 刷新/保存登录态(避免 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__":# headless=False:可视化运行,便于你看到是否已签到HongXiuSigner(headless=False, slow_mo_ms=50).run()
该脚本为红袖添香自动签到脚本,主要作用包括:
打开红袖添香网页并复用登录态:首次手动登录一次后保存
hongxiu_storage_state.json,以后每天运行无需再登录。自动寻找"福利/任务/签到/领奖"入口并点击:用关键词匹配,适配页面小改版。
输出日志:告诉你是"成功/已点击/未签到"。
主要方法
ensure_login(page, context):打开首页 → 判断是否已登录 → 若未登录引导你手动登录 → 保存登录态文件。do_checkin(page):依次尝试进入"我的/个人中心 → 福利/任务 → 签到/领奖",并根据页面文案判断是否成功。run():串联流程并在结束时保存最新登录态。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论