2026年1月23日星期五

Meishanren Forum Auto-Sign Script Guide

Summary: Provides server purchase links (Alibaba/Tencent/Huawei clouds), deployment tutorial for Qinglong Panel, and Python script for automated forum sign-in. Script reads login cookie from env, extracts formhash, submits sign-in via dsu_paulsign API, and parses results. For testing/educational use only.

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 osimport reimport sysimport timeimport requestsfrom urllib.parse import urljoin
BASE = "https://bbs.meishanren.com/"SIGN_PAGE = "plugin.php?id=dsu_paulsign:sign"SIGN_API = "plugin.php?id=dsu_paulsign:sign&operation=qiandao&inajax=1"
UA = (    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "    "(KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36")

def get_cookie_from_env() -> str:    """从环境变量读取论坛 Cookie(必须是已登录状态)"""    cookie = os.getenv("MEISHANREN_COOKIE""").strip()    if not cookie:        print("❌ 未设置环境变量 MEISHANREN_COOKIE(需要已登录 Cookie)")        print("   示例:export MEISHANREN_COOKIE='xxx=yyy; a=b; ...'")        sys.exit(1)    return cookie

def build_session(cookie: str) -> requests.Session:    """构造带默认请求头的 Session,并注入 Cookie"""    s = requests.Session()    s.headers.update(        {            "User-Agent": UA,            "Accept""text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",            "Accept-Language""zh-CN,zh;q=0.9",            "Connection""keep-alive",            "Referer": BASE,        }    )    # requests 支持直接用 headers.Cookie    s.headers["Cookie"] = cookie    return s

def fetch_formhash(session: requests.Session) -> str:    """访问签到页面,提取 formhash(Discuz 防 CSRF 参数)"""    url = urljoin(BASE, SIGN_PAGE)    r = session.get(url, timeout=20)    r.raise_for_status()
    # 常见形式:name="formhash" value="xxxx"    m = re.search(r'name="formhash"\s+value="([^"]+)"', r.text)    if not m:        # 有些页面会把 formhash 写在 JS 里:formhash=xxxx        m = re.search(r"formhash=([0-9a-zA-Z]+)", r.text)    if not m:        # 如果你看到"您需要先登录才能继续本操作",说明 Cookie 失效/没登录        if "您需要先登录" in r.text:            raise RuntimeError("Cookie 未登录或已失效:页面提示需要先登录")        raise RuntimeError("未能解析到 formhash:可能页面结构变化或被风控拦截")
    return m.group(1)

def do_signin(session: requests.Session, formhash: str) -> str:    """    执行签到提交(dsu_paulsign 插件)    参数含义:    - qdxq:签到心情/类型(站点可自定义,填默认就行)    - qdmode:签到模式(常见 1:快速签到)    - todaysay:签到留言(可为空)    """    url = urljoin(BASE, SIGN_API)
    payload = {        "formhash": formhash,        "qdxq""kx",          # 常见可选:kx(开心)/ng(难过)/ym(郁闷)... 不同站点可能不同        "qdmode""1",        "todaysay""打卡签到",  # 可改为空或自定义        "fastreply""0",    }
    headers = {        "Accept""*/*",        "X-Requested-With""XMLHttpRequest",        "Content-Type""application/x-www-form-urlencoded; charset=UTF-8",        "Referer": urljoin(BASE, SIGN_PAGE),    }
    r = session.post(url, data=payload, headers=headers, timeout=20)    r.raise_for_status()
    # Discuz inajax 往往返回的是 HTML 片段(含"签到成功/已签到/需要先登录"等)    return r.text

def parse_sign_result(raw: str) -> str:    """从返回内容里提炼可读结果(尽量兼容多种返回格式)"""    text = re.sub(r"<[^>]+>""", raw)  # 粗暴去 HTML 标签    text = text.replace("\n"" ").replace("\r"" ")    text = re.sub(r"\s+"" ", text).strip()
    # 常见关键词判断    if any(k in text for k in ["签到成功""签 到 成 功""恭喜""成功"]):        return f"✅ 签到成功:{text[:200]}"    if any(k in text for k in ["已经签到""已签到""今日已签""重复签到"]):        return f"ℹ️ 今日已签到:{text[:200]}"    if any(k in text for k in ["先登录""登录后""未登录"]):        return f"❌ 未登录或 Cookie 失效:{text[:200]}"    if any(k in text for k in ["验证码""安全验证""风险"]):        return f"⚠️ 可能触发风控/验证码:{text[:200]}"
    return f"⚠️ 未知响应:{text[:300]}"

def main():    cookie = get_cookie_from_env()    session = build_session(cookie)
    try:        formhash = fetch_formhash(session)        time.sleep(1)  # 轻微延迟,降低风控概率        raw = do_signin(session, formhash)        result = parse_sign_result(raw)        print(result)    except Exception as e:        print(f"❌ 执行失败:{e}")        sys.exit(1)

if __name__ == "__main__":    main()
解析

该脚本为眉山人论坛自动签到脚本,主要作用包括:

  • 使用 已登录 Cookie 模拟浏览器访问眉山人论坛;

  • 自动从签到页提取 formhash

  • 调用 dsu_paulsign 插件的签到接口提交签到;

  • 解析返回内容,判断 签到成功 / 已签到 / Cookie 失效 / 风控 等情况。

主要方法

  • get_cookie_from_env → 从环境变量读取已登录 Cookie,缺失则退出。

  • build_session → 创建 requests.Session,统一设置请求头,并把 Cookie 注入到请求中。

  • fetch_formhash → 访问签到页并解析 formhash(Discuz 的防 CSRF 参数),同时检测是否未登录。

  • do_signin → 向签到提交接口发送 POST 请求完成签到(携带 formhash 及签到参数)。

  • parse_sign_result → 清洗返回内容并根据关键词判断签到结果,输出可读提示。

  • main → 串起完整流程:取 Cookie → 建会话 → 取 formhash → 签到 → 输出结果。


注意

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


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

没有评论:

发表评论

Meishanren Forum Auto-Sign Script Guide

Summary: Provides server purchase links (Alibaba/Tencent/Huawei clouds), deployment tutorial for Qinglong Panel, and Python script for autom...