2026年2月14日星期六

New Xilu Forum Check-In Automation Script

Content Summary: This Python script automates the Xilu forum daily check-in task via Playwright. It saves login state for reuse, locates the check-in post, and automatically posts a reply. Execution is visible by default (headless=False). For testing purposes only.

1.购买服务器

阿里云:

服务器购买地址

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=201905

2.部署教程

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

3.代码如下

import reimport timefrom pathlib import Pathfrom playwright.sync_api import sync_playwright, TimeoutError as PWTimeoutError

class XiLuForumSigner:

    STATE_PATH = Path("xilu_storage_state.json")

    SIGN_THREAD_URL = "https://club.xilu.com/web/msgview-11025-1549419.html"
    def __init__(self, headless: bool = False, slow_mo_ms: int = 50):        self.headless = headless        self.slow_mo_ms = slow_mo_ms
    @staticmethod    def _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.SIGN_THREAD_URL, wait_until="domcontentloaded")        page.wait_for_timeout(1200)
        if self._looks_logged_in(page):            print("[login] 看起来已登录(将直接进入签到流程)。")            return
        print("[login] 可能尚未登录。请在打开的浏览器里手动登录西陆论坛。")        print("       登录完成后回到终端按回车继续(首次仅需一次,后续自动复用登录态)。")        input("       >>> 按回车继续...")
        context.storage_state(path=str(self.STATE_PATH))        print(f"[login] 登录态已保存:{self.STATE_PATH.resolve()}")
    def reply_checkin(self, page, message: str) -> bool:        """        在签到帖页面尝试回帖:        - 先找"回复/发表/提交"相关输入框        - 填入 message        - 点击提交        """        page.goto(self.SIGN_THREAD_URL, wait_until="domcontentloaded")        page.wait_for_timeout(1500)
        # 1) 尝试定位 textarea(不同论坛模板名称不一)        textarea_candidates = [            page.locator("textarea"),            page.locator("textarea[name='content']"),            page.locator("textarea[name='message']"),            page.locator("textarea[name='msg']"),        ]
        textarea = None        for t in textarea_candidates:            try:                if t.first.is_visible(timeout=1200):                    textarea = t.first                    break            except Exception:                continue
        if not textarea:            print("[reply] 未找到回帖输入框(可能需要进入"回复页",或该帖禁止回复)。")            return False
        textarea.click()        textarea.fill(message)        page.wait_for_timeout(500)
        # 2) 尝试点击"提交/发表/回复"按钮        btn_keywords = ["发表""提交""回复""发言""发布""确定"]        clicked = False        for kw in btn_keywords:            for locator in [                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}']"),            ]:                try:                    if locator.first.is_visible(timeout=1200):                        locator.first.click(timeout=3000)                        clicked = True                        break                except Exception:                    continue            if clicked:                break
        if not clicked:            print("[reply] 找到输入框但没找到"提交/发表/回复"按钮。可能需要滚动到底部或是按钮是图片/JS。")            return False
        # 3) 等待提交结果        page.wait_for_timeout(2000)        html = page.content()        if any(k in html for k in ["发表成功""回复成功""发布成功""已发表""已回复"]):            print("[reply] 页面提示疑似回帖成功。")            return True
        print("[reply] 已点击提交,但未识别到明确成功提示;建议你肉眼确认是否已回帖。")        return True  # 保守:点击已执行
    def 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)
                msg = f"签到打卡~ {time.strftime('%Y-%m-%d %H:%M:%S')}"                ok = self.reply_checkin(page, msg)
                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__":    # 可视化运行更稳:能看到是否成功回帖    XiLuForumSigner(headless=False, slow_mo_ms=50).run()
解析

该脚本为西陆论坛自动签到脚本,主要作用包括:

  1. 复用登录态:首次你手动登录一次后保存 xilu_storage_state.json,后续脚本自动带着登录态打开论坛页面。

  2. 自动"签到":西陆论坛常见的"签到"是进签到帖回帖打卡(比如各种"xx日签到帖")。

  3. 可视化执行:默认 headless=False,你能直接看到是否已经回帖成功。

主要方法

  • ensure_login(page, context)
    打开签到帖 → 判断是否已登录 → 未登录则让你手动登录一次 → 保存登录态文件。

  • reply_checkin(page, message)
    打开签到帖 → 找到回帖输入框(textarea)→ 填入签到文案 → 点击"发表/提交/回复" → 尝试判断是否成功。

  • run()
    串联流程:加载/保存登录态 → 登录 → 回帖签到 → 退出。


注意

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


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

没有评论:

发表评论

China。com Auto-signin Script : Setup, Login, Check-in Instructions

This script automates China.com sign-in tasks. Steps: 1) Purchase cloud server (Alibaba/Tencent/Huawei). 2) Deploy Qinglong Panel. 3) Run th...