|
|
程序演示
看着没有问题,不知道实际签到有没有哈哈哈
因为今天手动签到了 然后逛论坛才看到有人发了已经失效的脚本 想着试试 目前脚本使用Python 3
还没有签到的用户可以试试 有问题可以提出来
- import requests
- import re
- import random
- import time
- import logging
- # 配置日志输出,使其更加美观和实用
- logging.basicConfig(
- level=logging.INFO,
- format='%(asctime)s - %(levelname)s - %(message)s',
- datefmt='%Y-%m-%d %H:%M:%S'
- )
- logger = logging.getLogger(__name__)
- class BinMTSigner:
- """
- MT 论坛自动签到类
- """
- BASE_URL = 'https://bbs.binmt.cc'
- UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.31'
- def __init__(self, username, password):
- self.username = username
- self.password = password
- self.session = requests.Session()
- self.session.headers.update({'User-Agent': self.UA})
- def login(self):
- """执行登录操作"""
- try:
- # 1. 初始化登录页面,获取 loginhash 和 formhash
- init_url = f'{self.BASE_URL}/member.php?mod=logging&action=login&infloat=yes&handlekey=login&inajax=1&ajaxtarget=fwin_content_login'
- init_resp = self.session.get(init_url)
-
- loginhash_match = re.search(r'loginhash=(.*?)">', init_resp.text)
- formhash_match = re.search(r'formhash" value="(.*?)".*? />', init_resp.text)
- if not loginhash_match or not formhash_match:
- logger.error(f"[{self.username}] 无法提取 loginhash 或 formhash,可能网络请求异常")
- return False
- loginhash = loginhash_match.group(1)
- formhash = formhash_match.group(1)
- # 2. 提交登录请求
- login_url = f'{self.BASE_URL}/member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash={loginhash}&inajax=1'
- data = {
- 'formhash': formhash,
- 'referer': f'{self.BASE_URL}/forum.php',
- 'loginfield': 'username',
- 'username': self.username,
- 'password': self.password,
- 'questionid': '0',
- 'answer': '',
- }
-
- login_resp = self.session.post(login_url, data=data)
- login_text = login_resp.text
- # 检查登录结果
- if '欢迎您回来' in login_text:
- user_group_match = re.search(r'欢迎您回来,(.*?),现在', login_text)
- group_name = user_group_match.group(1) if user_group_match else "未知用户"
- logger.info(f"[{self.username}] 登录成功,当前状态: {group_name}")
- return True
- else:
- # 尝试提取错误信息
- error_msg = re.search(r"errorhandle_login\('(.*?)',", login_text)
- msg = error_msg.group(1) if error_msg else "登录失败,原因未知"
- logger.warning(f"[{self.username}] {msg}")
- return False
- except Exception as e:
- logger.error(f"[{self.username}] 登录过程发生异常: {e}")
- return False
- def sign_in(self):
- """执行签到操作"""
- try:
- # 1. 获取签到页面的 formhash (登录后的 formhash 可能变化)
- sign_page_url = f'{self.BASE_URL}/k_misign-sign.html'
- sign_page_resp = self.session.get(sign_page_url)
-
- formhash_match = re.search(r'formhash" value="(.*?)".*? />', sign_page_resp.text)
-
- if not formhash_match:
- logger.error(f"[{self.username}] 无法获取签到页面的 formhash,可能未登录或页面结构变更")
- return
- formhash = formhash_match.group(1)
- # 2. 发送签到请求
- sign_url = f'{self.BASE_URL}/plugin.php?id=k_misign:sign&operation=qiandao&format=text&formhash={formhash}'
- sign_resp = self.session.get(sign_url)
-
- # 3. 解析签到结果
- # 常见的返回格式可能是 XML: <root><![CDATA[签到成功...]]></root>
- result_match = re.search(r'<root>(?:<!\[CDATA\[)?(.*?)(?:\]\]>)?</root>', sign_resp.text, re.DOTALL)
-
- if result_match:
- msg = result_match.group(1)
- logger.info(f"[{self.username}] 签到响应: {msg}")
- else:
- logger.info(f"[{self.username}] 签到响应原始内容: {sign_resp.text}")
- except Exception as e:
- logger.error(f"[{self.username}] 签到过程发生异常: {e}")
- def run(self):
- """运行流程"""
- if self.login():
- self.sign_in()
- # 用户配置列表
- USER_LIST = [
- {'username': 'test', 'password': '123456', 'state': 1},
- # {'username': '示例用户', 'password': 'password', 'state': 0}, # state=0 表示不启用
- ]
- def main():
- logger.info("=== 程序启动 ===")
-
- for user in USER_LIST:
- if user.get('state') != 1:
- logger.info(f"跳过未启用用户: {user['username']}")
- continue
- # 添加随机延迟,模拟人类行为,避免被风控
- delay = random.uniform(1, 3)
- time.sleep(delay)
-
- signer = BinMTSigner(user['username'], user['password'])
- signer.run()
- logger.info("=== 所有任务完成 ===")
- if __name__ == '__main__':
- main()
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|