首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >强烈推荐!13K star,一款Python开源自动化抢票神器!

强烈推荐!13K star,一款Python开源自动化抢票神器!

作者头像
测试开发技术
发布2024-01-31 11:36:16
发布2024-01-31 11:36:16
6.3K0
举报
文章被收录于专栏:测试开发技术测试开发技术

马上就春节了,你抢到回家的票了吗?

别急,今天给大家推荐一款开源、功能强大且实用的12306抢票工具!

1、介绍

该项目名为py12306,由 GitHub 用户 pjialin 创建和维护,用Python语言开发。

项目目前在GitHub上有非常高的关注度,截止到今天,已获得了13k的点赞星标👍。

代码语言:javascript
复制
开源地址:https://github.com/pjialin/py12306

简单来说,py12306是一款12306购票助手工具,可以让你能加更方便、容易地购买到火车票,它支持集群,多账号,多任务购票以及提供了一个 Web 页面来管理购票任务。

它支持的主要特性有:

  • 支持按多日期查询余票、从站点查询
  • 支持自动打码下单
  • 电话、语音、邮件、微信多种消息通知支持
  • 多账号、多任务、多线程、分布式运行
  • Docker容器化部署支持
  • 支持Web可视化管理页面

2、安装与使用

温馨提醒py12306需要运行在 Python 3.6 以上版本。

  1. 安装依赖
代码语言:javascript
复制
git clone https://github.com/pjialin/py12306
pip install -r requirements.txt
  1. 配置程序
代码语言:javascript
复制
cp env.py.example env.py

执行运行前,根据自己的需求,调整配置,例如:

代码语言:javascript
复制
# 12306 账号
USER_ACCOUNTS = [
    # 目前已支持仅查询,不下单,屏蔽掉下面的账号即可
    {
        'key': 0,  # 如使用多个账号 key 不能重复
        'user_name': 'your user name',
        'password': '忽略',
        'type': 'qr'  # qr 为扫码登录,填写其他为密码登录
    },
    # {
    #     'key': 'wangwu',
    #     'user_name': 'wangwu@qq.com',
    #     'password': 'wangwu',
    #     'type': ''
    # }
]

# 查询间隔(指每一个任务中每一个日期的间隔 / 单位秒)
# 默认取间隔/2 到 间隔之间的随机数 如设置为 1 间隔则为 0.5 ~ 1 之间的随机数
# 接受字典形式 格式:    {'min': 0.5, 'max': 1}
QUERY_INTERVAL = 1

# 网络请求重试次数
REQUEST_MAX_RETRY = 5

# 用户心跳检测间隔 格式同上
USER_HEARTBEAT_INTERVAL = 120

# 多线程查询
QUERY_JOB_THREAD_ENABLED = 0  # 是否开启多线程查询,开启后第个任务会单独分配线程处理
  1. 启动前测试

目前提供了一些简单的测试,包括用户账号检测,乘客信息检测,车站检测等

代码语言:javascript
复制
python main.py -t

# 默认不会进行通知测试,要对通知进行测试需要加上 -n 参数 
python main.py -t -n
  1. 运行程序
代码语言:javascript
复制
python main.py

常用参数列表:

  • -t 测试配置信息
  • -t -n 测试配置信息以及通知消息
  • -c 指定自定义配置文件位置

3、Docker容器部署(可选)

  1. 将配置文件下载到本地
代码语言:javascript
复制
docker run --rm pjialin/py12306 cat /config/env.py > env.py
# 或
curl https://raw.githubusercontent.com/pjialin/py12306/master/env.docker.py.example -o env.py
  1. 修改好配置后运行
代码语言:javascript
复制
docker run --rm --name py12306 -p 8008:8008 -d -v $(pwd):/config -v py12306:/data pjialin/py12306

当前目录会多一个 12306.log 的日志文件, tail -f 12306.log

4、Web 管理页面访问

py12306/web/web.py代码中可知,此项目web部分,采用了flask框架来开发,默认端口为8080

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import json
import logging
from datetime import timedelta

from flask import Flask, request
from flask_jwt_extended import (
    JWTManager)

from py12306.config import Config
from py12306.helpers.func import *


@singleton
class Web:
    session = None
    jwt = None
    log = None

    def __init__(self):
        self.session = Flask(__name__)
        self.log = logging.getLogger('werkzeug')
        self.log.setLevel(logging.ERROR)

        self.register_blueprint()
        self.session.config['JWT_SECRET_KEY'] = 'secret'  # 目前都是本地,暂不用放配置文件
        self.session.config['JWT_ACCESS_TOKEN_EXPIRES'] = timedelta(seconds=60 * 60 * 24 * 7)  # Token 超时时间 7 天
        self.jwt = JWTManager(self.session)

    def register_blueprint(self):
        from py12306.web.handler.user import user
        from py12306.web.handler.stat import stat
        from py12306.web.handler.app import app
        from py12306.web.handler.query import query
        from py12306.web.handler.log import log
        self.session.register_blueprint(user)
        self.session.register_blueprint(stat)
        self.session.register_blueprint(app)
        self.session.register_blueprint(query)
        self.session.register_blueprint(log)

    @classmethod
    def run(cls):
        self = cls()
        self.start()

    def start(self):
        if not Config().WEB_ENABLE or Config().is_slave(): return
        # if Config().IS_DEBUG:
        #     self.run_session()
        # else:
        create_thread_and_run(self, 'run_session', wait=False)

    def run_session(self):
        debug = False
        if is_main_thread():
            debug = Config().IS_DEBUG
        self.session.run(debug=debug, port=Config().WEB_PORT, host='0.0.0.0')


if __name__ == '__main__':
    Web.run()

打开浏览器访问:http://127.0.0.1:8080即可

如果觉得有用,就请关注、点赞、在看、分享到朋友圈吧!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、介绍
  • 2、安装与使用
  • 3、Docker容器部署(可选)
  • 4、Web 管理页面访问
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档