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.
阿里云:
服务器购买地址
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=2019052.部署教程
3.代码如下
# -*- coding: utf-8 -*-import osimport reimport sysimport timeimport requestsfrom urllib.parse import urljoinBASE = "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 cookiedef 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.Cookies.headers["Cookie"] = cookiereturn sdef 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=xxxxm = 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.textdef 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 → 签到 → 输出结果。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论