2026年1月21日星期三

Auto Sign Script for Huasheng Forum : Deploy Guide & Code

Script automates sign-in for bbs.voc.com.cn using a cookie. It detects plugins (dsu_paulsign/k_misign), extracts formhash, and posts sign-in requests. Requires server setup (Alibaba/Tencent/Huawei Cloud) and Qinglong Panel for scheduling.

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 timeimport randomimport requests
from bs4 import BeautifulSoup

BASE_URL = "https://bbs.voc.com.cn/"TIMEOUT = 20

def build_session(cookie: str) -> requests.Session:    """创建带默认头的会话"""    s = requests.Session()    s.headers.update({        "User-Agent""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "                      "(KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",        "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_URL,    })    # 直接塞 Cookie(最通用)    s.headers["Cookie"] = cookie.strip()    return s

def http_get(session: requests.Session, url: str) -> str:    """GET 请求并返回文本"""    r = session.get(url, timeout=TIMEOUT, allow_redirects=True)    r.raise_for_status()    # 有些站点编码不标准,给个兜底    r.encoding = r.apparent_encoding or "utf-8"    return r.text

def http_post(session: requests.Session, url: str, data: dict) -> str:    """POST 请求并返回文本"""    r = session.post(url, data=data, timeout=TIMEOUT, allow_redirects=True)    r.raise_for_status()    r.encoding = r.apparent_encoding or "utf-8"    return r.text

def extract_formhash(html: str) -> str:    """从页面中提取 Discuz 的 formhash"""    # 常见:name="formhash" value="xxxx"    m = re.search(r'name="formhash"\s+value="([^"]+)"', html)    if m:        return m.group(1)
    # 兼容:formhash=xxxx    m = re.search(r"formhash=([0-9a-zA-Z]+)", html)    if m:        return m.group(1)
    return ""

def detect_sign_plugin(html: str) -> str:    """检测常见签到插件类型:dsu_paulsign / k_misign"""    # dsu_paulsign 常见入口    if "dsu_paulsign:sign" in html:        return "dsu_paulsign"
    # k_misign 常见入口    if "k_misign:sign" in html:        return "k_misign"
    # 兜底:页面里出现"签到"且带 plugin.php?id=xxx:sign    if re.search(r"plugin\.php\?id=[^\"']+:sign", html):        return "unknown_sign_plugin"
    return ""

def find_sign_entry_url(html: str) -> str:    """在页面中尝试找签到入口链接"""    soup = BeautifulSoup(html, "html.parser")    for a in soup.find_all("a", href=True):        text = (a.get_text() or "").strip()        href = a["href"]
        # 关键词:签到 / 打卡 / 签到领奖励(尽量宽松)        if any(k in text for k in ["签到""打卡""每日签到""签到领奖励"]):            if "plugin.php?id=" in href or "sign" in href:                return href
    # 正则兜底:找 plugin.php?id=xxx:sign    m = re.search(r'(plugin\.php\?id=[^"\']+:sign[^"\']*)', html)    if m:        return m.group(1)
    return ""

def normalize_url(href: str) -> str:    """把相对链接变成绝对链接"""    href = href.strip()    if href.startswith("http://"or href.startswith("https://"):        return href    if href.startswith("/"):        return BASE_URL.rstrip("/") + href    return BASE_URL + href

def sign_by_dsu_paulsign(session: requests.Session, formhash: str) -> str:    """    走 dsu_paulsign 插件签到    常见流程:    1) GET plugin.php?id=dsu_paulsign:sign 取页面 & 可能需要 formhash    2) POST plugin.php?id=dsu_paulsign:sign&operation=qiandao&infloat=1...    """    sign_page = normalize_url("plugin.php?id=dsu_paulsign:sign")    html = http_get(session, sign_page)
    # 有些站点 formhash 需要从签到页再取一次    fh = extract_formhash(html) or formhash    if not fh:        return "❌ 未获取到 formhash,无法执行 dsu_paulsign 签到"
    # qdxq / qdmode / todaysay 等字段在不同站点可能不同,这里给通用可跑值    # 一般只要 formhash + qdmode + todaysay 就能成功    post_url = normalize_url("plugin.php?id=dsu_paulsign:sign&operation=qiandao&inajax=1")    payload = {        "formhash": fh,        "qdmode""1",          # 1 通常是"开心"之类        "qdxq""kx",           # 心情枚举(不同站点可不同)        "todaysay""签到",     # 签到留言        "fastreply""0",    }
    resp = http_post(session, post_url, payload)
    # 结果判断(尽量宽松)    if any(k in resp for k in ["签到成功""已签到""已经签到""success""恭喜"]):        return "✅ dsu_paulsign:签到成功/已签到"    return f"⚠️ dsu_paulsign:返回未知结果(可查看响应片段):{resp[:200]}"

def sign_by_k_misign(session: requests.Session, formhash: str) -> str:    """    走 k_misign 插件签到    常见流程:    GET plugin.php?id=k_misign:sign&operation=qiandao&formhash=xxx&inajax=1    """    if not formhash:        # 尝试先打开 k_misign 页面拿 formhash        sign_home = normalize_url("plugin.php?id=k_misign:sign")        html = http_get(session, sign_home)        formhash = extract_formhash(html)
    if not formhash:        return "❌ 未获取到 formhash,无法执行 k_misign 签到"
    url = normalize_url(        f"plugin.php?id=k_misign:sign&operation=qiandao&formhash={formhash}&inajax=1"    )    resp = http_get(session, url)
    if any(k in resp for k in ["签到成功""已签到""已经签到""success""恭喜"]):        return "✅ k_misign:签到成功/已签到"    return f"⚠️ k_misign:返回未知结果(可查看响应片段):{resp[:200]}"

def run_sign() -> None:    """主流程:检查登录态 -> 获取 formhash -> 自动识别插件并签到"""    cookie = os.getenv("VOC_COOKIE""").strip()    if not cookie:        print("❌ 缺少环境变量 VOC_COOKIE(请填登录后的 Cookie)")        return
    session = build_session(cookie)
    # 1) 先访问首页,判断登录态 + 拿 formhash + 找签到入口    home_html = http_get(session, BASE_URL)
    # 粗略判断是否登录:很多 Discuz 登录后会出现 "退出/设置/消息/提醒/我的"    if not any(k in home_html for k in ["退出""设置""消息""提醒""我的""uid="]):        print("⚠️ 可能未登录或 Cookie 无效(仍会尝试签到,但大概率失败)")
    formhash = extract_formhash(home_html)    entry = find_sign_entry_url(home_html)    plugin = detect_sign_plugin(home_html)
    if entry:        entry_url = normalize_url(entry)        # 入口页可能更容易拿到 formhash / 插件信息        try:            entry_html = http_get(session, entry_url)            formhash = extract_formhash(entry_html) or formhash            plugin = detect_sign_plugin(entry_html) or plugin        except Exception:            pass
    print(f"🔎 检测结果:plugin={plugin or '未知'},formhash={'已获取' if formhash else '未获取'}")
    # 2) 按检测结果尝试签到(按优先级)    # 随机短等待,稍微"像人"    time.sleep(random.uniform(1.02.2))
    results = []
    if plugin == "dsu_paulsign":        results.append(sign_by_dsu_paulsign(session, formhash))    elif plugin == "k_misign":        results.append(sign_by_k_misign(session, formhash))    else:        # 未识别:两种都试一下,成功一个就算        results.append(sign_by_dsu_paulsign(session, formhash))        time.sleep(random.uniform(0.81.6))        results.append(sign_by_k_misign(session, formhash))
    print("====== 签到结果 ======")    for r in results:        print(r)

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

该脚本为华声论坛任务脚本,主要功能包括:

  • 从环境变量读取 Cookie,以已登录态模拟用户访问 bbs.voc.com.cn

  • 自动抓取 formhash(Discuz 常见的 CSRF 校验参数)

  • 自动识别并适配常见签到插件dsu_paulsign / k_misign

  • 执行签到请求并输出结果(成功 / 已签到 / 失败原因片段)

主要方法

  • build_session → 创建带默认请求头与 Cookie 的 requests.Session 会话,复用连接并保持登录态

  • http_get → 封装 GET 请求并返回页面文本,自动处理编码与跳转

  • http_post → 封装 POST 请求并返回页面文本,自动处理编码与跳转

  • extract_formhash → 从 HTML 中提取 Discuz 的 formhash,用于通过 CSRF 校验

  • detect_sign_plugin → 在页面中识别签到插件类型(dsu_paulsign / k_misign / 未知)

  • find_sign_entry_url → 从页面里查找"签到/打卡"等入口链接,拿到更准确的签到页

  • normalize_url → 把相对链接补全为可直接请求的绝对 URL

  • sign_by_dsu_paulsign → 按 dsu_paulsign 插件的常见交互(先取页再提交表单)完成签到

  • sign_by_k_misign → 按 k_misign 插件的常见交互(带 formhash 的签到请求)完成签到

  • run_sign → 主流程:检查 Cookie → 获取 formhash → 自动识别插件 → 执行签到并打印结果


注意

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


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

没有评论:

发表评论

00后春节摆摊狂赚24万,揭秘面具免费送背后的吸金套路

利用押金模式抓住游客贪便宜心理,七天引流10万粉丝,低成本高利润的节日流量变现术 七天赚 24 万的小生意揭秘 马上过年了,告诉你一个只用七天时间就可以赚到 24 万的小生意, 因此,如果今年口袋拿不出3万块钱回家过年的哥们儿,一定要把这篇内容好好地看完。 因为今天这篇内容太...