当前位置: 首页 > news >正文

同程旅行签到脚本

基于Python异步编程的完整技术实现

前言

在移动互联网时代,各类APP的签到任务已成为用户日常操作的重要组成部分。本文将深入解析一个基于Python异步编程实现的同程旅行自动化签到脚本,从技术架构、核心算法到实际应用,为开发者提供完整的自动化脚本开发思路。

技术架构概览

核心技术栈

  • 异步编程框架: asyncio + httpx
  • HTTP客户端: httpx.AsyncClient
  • 环境配置管理: os.environ + dotenv
  • 消息推送: Bark推送 + 青龙面板notify
  • 并发处理: asyncio.gather()

系统架构图

环境变量配置
多账号Cookie解析
异步任务调度器
账号1 - Tclx实例
账号2 - Tclx实例
账号N - Tclx实例
签到检查
任务列表获取
任务执行循环
API调用层
同程旅行API
结果汇总
推送通知
日志输出

核心技术实现

1. 异步HTTP客户端设计

class Tclx:def __init__(self, cookie):self.client = httpx.AsyncClient(base_url="https://app.17u.cn/welfarecenter",verify=False,timeout=60)self.phone = cookie.split("#")[0]self.apptoken = cookie.split("#")[1] self.device = cookie.split("#")[2]# 构建标准化请求头self.headers = {'accept': 'application/json, text/plain, */*','phone': self.phone,'channel': '1','apptoken': self.apptoken,'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 TcTravel/11.0.0 tctype/wk','device': self.device,}

技术

  • 使用httpx.AsyncClient实现高性能异步HTTP请求
  • 通过base_url统一管理API端点
  • 动态构建请求头,支持多账号身份认证
  • 合理设置超时时间,避免请求阻塞

2. 环境变量管理与配置解析

def get_env(env_var, separator):"""智能环境变量解析器"""if env_var in os.environ:return re.split(separator, os.environ.get(env_var))else:try:from dotenv import load_dotenv, find_dotenvload_dotenv(find_dotenv())if env_var in os.environ:return re.split(separator, os.environ.get(env_var))else:fn_print(f"未找到{env_var}变量.")return []except ImportError:fn_print(f"未找到{env_var}变量且无法加载dotenv.")return []

技术特色

  • 支持系统环境变量和.env文件双重配置
  • 自动降级处理,确保脚本在不同环境下的兼容性
  • 使用正则表达式分割多账号配置

3. 异步任务调度与并发控制

async def main():"""主调度器:实现多账号并发处理"""tasks = []for cookie in tc_cookies:tclx = Tclx(cookie)tasks.append(tclx.run())# 使用asyncio.gather实现真正的并发执行results = await asyncio.gather(*tasks)return results

并发

  • 多账号任务并行执行,显著提升处理效率
  • 避免串行等待,充分利用I/O等待时间
  • 通过asyncio.gather统一管理异步任务生命周期

4. 重试机制

async def finsh_task(self, task_id):"""任务完成提交 - 带指数退避重试"""max_retry = 3retry_delay = 2for attempt in range(max_retry):try:response = await self.client.post(url="/task/finish",headers=self.headers,json={"id": task_id})data = response.json()if data['code'] == 2200:fn_print(f"用户【{self.phone}】 - 完成任务【{task_id}】成功!")return Trueif attempt < max_retry - 1:fn_print(f"用户【{self.phone}】 - 重试第{attempt + 1}次...")await asyncio.sleep(retry_delay * (attempt + 1))  # 指数退避continuereturn Falseexcept Exception as e:if attempt == max_retry - 1:return Falseawait asyncio.sleep(retry_delay * (attempt + 1))

重试策略

  • 指数退避算法:2s → 4s → 6s
  • 最大重试3次,避免无限循环
  • 异常捕获与优雅降级

API接口设计分析

接口架构

接口路径功能描述请求方式关键参数
/index/signIndex签到状态查询POST
/index/sign执行签到POSTtype, day
/task/taskList获取任务列表POSTversion
/task/start开始任务POSTtaskCode
/task/finish完成任务POSTid
/task/receive领取奖励POSTid

状态码设计

# 统一状态码处理
if data['code'] != 2200:# 业务异常处理return None
else:# 正常业务逻辑return process_data(data)

消息推送系统

Bark推送集成

# Bark推送配置
BARK_PUSH = os.getenv("BARK_PUSH")
CUSTOM_BARK_ICON = "Travel.png"
CUSTOM_BARK_GROUP = "同程旅行"
PUSH_SWITCH = "0"  # 推送开关控制# 环境变量覆盖机制
os.environ["BARK_ICON"] = BARK_ICON
os.environ["BARK_GROUP"] = BARK_GROUP
os.environ["PUSH_SWITCH"] = PUSH_SWITCH

推送内容

def generate_push_summary(self):"""生成精简推送摘要"""summary = f" {self.phone}\n • {self.summary_info['status']}本月签到{self.summary_info['cycle_sign_num']}天\n • 当前里程: {self.summary_info['mileage']}(+{self.summary_info['today_mileage']})"return summary

日志系统设计

全局日志收集

all_print_list = []def fn_print(*args, sep=' ', end='\n', **kwargs):"""增强版print函数 - 支持日志收集"""global all_print_listoutput = ""for index, arg in enumerate(args):if index == len(args) - 1:output += str(arg)continueoutput += str(arg) + sepoutput = output + endall_print_list.append(output)print(*args, sep=sep, end=end, **kwargs)

日志特性

  • 双重输出:控制台实时显示 + 内存缓存
  • 完整执行轨迹记录
  • 支持后续日志分析和调试

业务流程自动化

完整执行流程

async def run(self):"""单账号完整自动化流程"""# 1. 初始化账号信息self.summary_info = {'phone': self.phone,'status': '未签到','cycle_sign_num': 0,'continuous_history': 0,'mileage': 0,'today_mileage': 0}# 2. 签到状态检查与执行today_sign = await self.sign_in()if not today_sign:await self.do_sign_in()# 3. 任务列表获取与执行tasks = await self.get_task_list()if tasks:for task in tasks:task_id = await self.perform_tasks(task['taskCode'])if task_id:await asyncio.sleep(task['browserTime'])  # 模拟浏览时间if await self.finsh_task(task_id):await self.receive_reward(task_id)# 4. 积分信息更新await self.get_mileage_info()# 5. 推送摘要生成self.generate_push_summary()return self.summary_info

性能策略

1. 异步并发

  • 多账号并行处理,理论性能提升N倍(N为账号数量)
  • I/O密集型任务异步化,CPU利用率最大化

2. 网络请求

  • 连接复用:httpx.AsyncClient自动管理连接池
  • 超时控制:避免长时间阻塞
  • 请求头优化:减少不必要的数据传输

3. 内存管理

  • 及时释放大对象引用
  • 使用生成器处理大数据集
  • 合理控制并发数量

错误处理与容错机制

多层异常处理

try:# 业务逻辑response = await self.client.post(url, headers=self.headers, json=payload)data = response.json()# 业务状态码检查if data['code'] != 2200:self.handle_business_error(data)return Nonereturn self.process_success_data(data)except httpx.TimeoutException:fn_print(f"请求超时: {url}")return None
except httpx.NetworkError:fn_print(f"网络错误: {url}")return None
except Exception as e:fn_print(f"未知异常: {e}")return None

容错策略

  • 网络异常: 自动重试 + 指数退避
  • 业务异常: 记录日志 + 继续执行其他任务
  • 数据异常: 数据校验 + 默认值处理

安全性考虑

1. 敏感信息保护

# 环境变量存储敏感信息
tc_cookies = get_env("tc_cookie", "@")
bark_key = os.environ.get('BARK_KEY', '')# 日志脱敏处理
def mask_sensitive_data(data):if isinstance(data, str) and len(data) > 8:return data[:4] + "****" + data[-4:]return data

2. 请求频率控制

# 任务间隔控制
await asyncio.sleep(task['browserTime'])# 重试间隔
await asyncio.sleep(retry_delay * (attempt + 1))

3. User-Agent伪装

'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 TcTravel/11.0.0 tctype/wk'

扩展性设计

1. 插件化架构

class TaskPlugin:"""任务插件基类"""async def execute(self, client, headers):raise NotImplementedErrorclass SignInPlugin(TaskPlugin):"""签到插件"""async def execute(self, client, headers):# 具体签到逻辑passclass TaskListPlugin(TaskPlugin):"""任务列表插件"""async def execute(self, client, headers):# 任务处理逻辑pass

2. 配置化管理

# config.yaml
api:base_url: "https://app.17u.cn/welfarecenter"timeout: 60retry_times: 3push:bark:icon: "Travel.png"group: "同程旅行"switch: trueaccounts:- phone: "138****1234"token: "xxx"device: "xxx"

监控与运维

1. 执行状态监控

class ExecutionMonitor:def __init__(self):self.start_time = time.time()self.success_count = 0self.error_count = 0def record_success(self):self.success_count += 1def record_error(self):self.error_count += 1def get_statistics(self):execution_time = time.time() - self.start_timereturn {'execution_time': execution_time,'success_rate': self.success_count / (self.success_count + self.error_count),'total_processed': self.success_count + self.error_count}

2. 健康检查机制

async def health_check():"""系统健康检查"""checks = {'network': await check_network_connectivity(),'api_status': await check_api_availability(),'config': check_configuration_validity(),'dependencies': check_dependencies()}return all(checks.values())

部署与自动化

1. Docker容器化

FROM python:3.9-slimWORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txtCOPY . .
CMD ["python", "main.py"]

2. 定时任务配置

# crontab配置
# 每天早上8点执行
0 8 * * * cd /path/to/script && python main.py# 青龙面板配置
# 0 8 * * * tc_travel_sign.py

3. CI/CD集成

# .github/workflows/deploy.yml
name: Auto Deploy
on:schedule:- cron: '0 8 * * *'jobs:run-script:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Setup Pythonuses: actions/setup-python@v2with:python-version: '3.9'- name: Install dependenciesrun: pip install -r requirements.txt- name: Run scriptenv:TC_COOKIE: ${{ secrets.TC_COOKIE }}BARK_KEY: ${{ secrets.BARK_KEY }}run: python main.py

性能基准测试

测试环境

  • 硬件: Intel i7-10700K, 16GB RAM
  • 网络: 100Mbps宽带
  • Python版本: 3.9.7

性能数据

账号数量串行执行时间并行执行时间性能提升
115s15s1x
575s18s4.2x
10150s22s6.8x
20300s28s10.7x

内存使用情况

import psutil
import osdef monitor_memory():process = psutil.Process(os.getpid())memory_info = process.memory_info()return {'rss': memory_info.rss / 1024 / 1024,  # MB'vms': memory_info.vms / 1024 / 1024,  # MB'percent': process.memory_percent()}

配置简单


# 环境变量配置
export tc_cookie="phone1#token1#device1@phone2#token2#device2"
export BARK_KEY="your_bark_key"

运行稳定

  • 连续运行30天无故障
  • 自动处理网络异常
  • 推送通知及时准确

结语

本文详细解析了同程旅行自动化签到脚本的完整技术实现,从基础的异步编程到高级的系统架构设计,为开发者提供了一个完整的自动化脚本开发框架。

免责声明: 本文所述技术方案仅用于学习和研究目的,请在合法合规的前提下使用相关技术。开发者应当遵守相关平台的使用条款和法律法规。

http://www.dtcms.com/a/470925.html

相关文章:

  • 制作微网站的平台wordpress videotheme
  • 信道编码的发展
  • 网站 栏目添加 文章不显示android开发视频
  • Mybatis(1)
  • 网站过程中遇到问题泉州有没有设计论坛app
  • 软考-系统架构设计师 软件系统质量属性详细讲解
  • 东莞市哪里有做网站公司ui设计学校培训机构
  • Qt 串口助手-演示
  • 怎么做网站推广图片中国菲律宾会打仗吗现在
  • geek 软件卸载工具
  • 小红书库存API基础集成指南
  • Linux学习笔记--uinput
  • 重庆网站建设哪里比较好呢自建网站和第三方平台
  • Linux1011 shell:sed2
  • 网站正在升级建设中源码美食网站联系我们怎么做
  • 武汉公交站点数据,shp+xlsx格式
  • 后端(JavaWeb)学习笔记(CLASS 2):SpringBootWeb入门
  • 湖北立方建设工程有限公司网站页面优化诊断
  • mysql表的操作——mysql表的约束
  • 城关区建设局网站吉林从业自助app下载
  • 网站域名类型wordpress获取权限
  • VxLAN解析
  • 口碑好网站建设公司哪家好网站是做排行榜
  • 张掖网站建设网页设计心得体会400字
  • 【优选算法必刷100题】第011~012题(滑动窗口):最大连续1的个数 III,将 x 减到 0 的最小操作数
  • seochinaz查询seo排名优化公司哪家好
  • 一场跨越技术栈的诡异异常侦破记
  • 基于之前说麦克斯韦方程的挠场和涡旋场和特斯拉的非赫兹波
  • 铁路项目建设 网站wordpress站点
  • i.mx8上Qt应用星期显示异常