本文提供小鱼旅游网自动签到Python脚本完整代码及部署教程,包含阿里云/腾讯云服务器购买、青龙面板配置、模拟登录和AJAX签到实现,用于自动获取积分或优惠券奖励。脚本含CSRF令牌处理和异常捕获。
Tags:
阿里云:
服务器购买地址
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=2019052.部署教程
3.代码如下
import requestsimport jsonimport refrom datetime import datetime# 配置区 - 请替换为你的实际信息CONFIG = {"username": "你的小鱼旅游网账号", # 手机号/用户名/邮箱"password": "你的小鱼旅游网密码", # 登录密码# 请求头:模拟真实浏览器,避免被反爬/风控拦截"headers": {"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","Referer": "https://www.xiaoyu5.com/","Accept": "application/json, text/javascript, */*; q=0.01","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","X-Requested-With": "XMLHttpRequest", # 标识AJAX请求"Connection": "keep-alive"}}# 核心接口地址(抓包确认的小鱼旅游网专属接口)API_URLS = {"index": "https://www.xiaoyu5.com/", # 首页(提取动态参数)"login": "https://www.xiaoyu5.com/user/login", # 登录接口"sign": "https://www.xiaoyu5.com/user/signIn" # 签到接口}def init_session():"""初始化请求会话作用:创建带Cookie维护的Session对象,提取首页动态参数(如CSRF令牌)返回:(session对象, 动态令牌) 或 (None, None)"""session = requests.Session()session.headers.update(CONFIG["headers"])try:# 访问首页,获取初始化Cookie和动态令牌response = session.get(API_URLS["index"], timeout=20)if response.status_code == 200:print(f"【{datetime.now()}】小鱼旅游网会话初始化成功")# 提取页面中的CSRF/TOKEN令牌(适配网站防跨站请求机制)token_match = re.search(r'<meta name="csrf-token" content="(.*?)"', response.text)token = token_match.group(1) if token_match else ""return session, tokenelse:print(f"【{datetime.now()}】会话初始化失败,状态码:{response.status_code}")return None, Noneexcept requests.exceptions.Timeout:print(f"【{datetime.now()}】会话初始化超时:连接服务器耗时过长")return None, Noneexcept Exception as e:print(f"【{datetime.now()}】会话初始化异常:{str(e)}")return None, Nonedef login_to_xiaoyu5(session, token):"""小鱼旅游网登录函数参数:初始化后的session对象、动态令牌返回:登录成功返回session,失败返回None"""if not session:print(f"【{datetime.now()}】会话未初始化,无法登录")return None# 构造登录参数(包含动态令牌,适配网站风控)login_data = {"username": CONFIG["username"],"password": CONFIG["password"],"rememberMe": "true", # 记住登录状态"_token": token # 动态令牌(防跨站请求)}try:# 发送登录请求(POST方式,AJAX登录)response = session.post(url=API_URLS["login"],data=login_data,timeout=20)# 解析JSON响应(网站登录返回标准JSON)login_result = response.json()if login_result.get("code") == 200 or login_result.get("success") is True:print(f"【{datetime.now()}】小鱼旅游网登录成功!{login_result.get('msg', '登录成功')}")return sessionelse:error_msg = login_result.get("msg", "账号或密码错误")print(f"【{datetime.now()}】登录失败:{error_msg}")return Noneexcept json.JSONDecodeError:print(f"【{datetime.now()}】登录响应解析失败,原始响应:{response.text[:200]}")return Noneexcept requests.exceptions.Timeout:print(f"【{datetime.now()}】登录请求超时:服务器未及时响应")return Noneexcept Exception as e:print(f"【{datetime.now()}】登录异常:{str(e)}")return Nonedef execute_sign(session):"""执行小鱼旅游网签到操作参数:登录成功后的session对象返回:签到成功返回True,失败返回False"""if not session:print(f"【{datetime.now()}】未登录,无法执行签到")return Falsetry:# 发送签到请求(AJAX POST请求)sign_response = session.post(url=API_URLS["sign"],timeout=20)# 解析签到结果(JSON格式)sign_result = sign_response.json()if sign_result.get("code") == 200 or "成功" in sign_result.get("msg", ""):reward = sign_result.get("data", {}).get("reward", "未知奖励")print(f"【{datetime.now()}】签到成功!{sign_result.get('msg')},获得奖励:{reward}")return Trueelse:print(f"【{datetime.now()}】签到失败:{sign_result.get('msg', '未知错误')}")return Falseexcept json.JSONDecodeError:print(f"【{datetime.now()}】签到响应解析失败,原始响应:{sign_response.text[:200]}")return Falseexcept requests.exceptions.Timeout:print(f"【{datetime.now()}】签到请求超时:服务器未及时响应")return Falseexcept Exception as e:print(f"【{datetime.now()}】签到异常:{str(e)}")return Falseif __name__ == "__main__":"""脚本主入口:按流程执行初始化→登录→签到"""print("===== 小鱼旅游网自动签到脚本 =====")# 1. 初始化会话(含提取动态令牌)session, token = init_session()if not session:print("会话初始化失败,脚本退出")exit(1)# 2. 账号登录login_session = login_to_xiaoyu5(session, token)# 3. 执行签到if login_session:execute_sign(login_session)else:print("登录失败,无法执行签到")print("===== 脚本执行结束 =====")
该脚本是针对小鱼旅游网定制的自动签到工具,核心作用是替代人工完成 "打开网站→提取动态令牌→输入账号密码登录→执行 AJAX 签到" 的全流程。脚本适配了该网站的风控机制(提取 CSRF 令牌)、AJAX 请求特性和 JSON 响应格式,内置了超时处理、JSON 解析异常捕获等健壮性逻辑,能自动完成身份验证和签到操作,并清晰反馈签到奖励(积分 / 优惠券等),支持结合系统定时任务实现每日自动签到。
主要方法
init_session()方法:核心作用是搭建稳定的请求环境并提取动态安全参数。首先创建
requests.Session()对象(自动维护 Cookie),设置模拟浏览器的请求头;然后访问网站首页,不仅获取初始化 Cookie,还通过正则表达式提取页面中的 CSRF/TOKEN 令牌(该网站通过令牌防止跨站请求伪造,是登录的必要参数);同时处理了请求超时、连接异常等问题,返回 "会话对象 + 动态令牌" 的组合,为后续登录做准备。login_to_xiaoyu5(session, token)方法:作用是完成小鱼旅游网的账号身份验证。该方法接收会话对象和动态令牌,先校验会话有效性;接着构造包含 "账号、密码、记住登录、动态令牌" 的登录参数,向专属登录接口发送 POST 请求(符合网站 AJAX 登录规范);请求完成后解析 JSON 响应,通过
code字段(200 为成功)或success字段判断登录状态,登录成功时会话自动保存登录 Cookie,失败时输出具体错误原因(如密码错误);针对 JSON 解析失败、请求超时等异常也做了兜底处理,避免脚本崩溃。execute_sign(session)方法:作用是执行实际的签到操作。该方法接收登录成功的会话对象,先校验登录状态;然后向签到接口发送 POST 请求(AJAX 方式,无需额外参数,依赖登录 Cookie 和请求头标识);解析 JSON 格式的签到响应,通过
code字段或 "成功" 关键词判断结果,同时提取响应中的奖励信息(积分 / 优惠券等)并输出;若解析失败或请求超时,会明确提示异常原因,最终返回布尔值标识签到状态。主入口(
__main__):作为脚本的启动入口,核心作用是按 "初始化会话(提令牌)→账号登录→执行签到" 的逻辑有序串联所有方法。首先输出脚本启动提示,初始化失败则直接退出;会话成功后携带令牌执行登录,登录成功才触发签到操作,登录失败则明确提示;最后输出脚本结束提示,流程贴合网站的真实访问逻辑,便于调试和维护。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论