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

这篇文章介绍了名为py12306的开源12306购票工具,由Python开发,支持多账号、集群购票、自动化通知和Web管理界面。它提供了方便的购票体验并可通过Docker进行部署。
摘要由CSDN通过智能技术生成

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

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

1、介绍

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

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

开源地址:https://github.com/pjialin/py12306

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

它支持的主要特性有:

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

2、安装与使用

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

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

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

# 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. 启动前测试

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

python main.py -t

# 默认不会进行通知测试,要对通知进行测试需要加上 -n 参数 
python main.py -t -n
  1. 运行程序
python main.py

常用参数列表:

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

3、Docker安装与使用

  1. 将配置文件下载到本地
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. 修改好配置后运行
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

# -*- 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即可

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python抢票软件是一种使用Python编程语言开发的工具,用于帮助用户在购票高峰期快速抢到车票。其中,有两个比较知名的Python抢票软件是"12306"和"py12306"。 "12306"是一个非常受欢迎的抢票工具,它由名叫文贤平的程序员开发,并在GitHub上获得了超过1.2万个星标。这个工具从查询余票开始,到付款完成,最后获取订单号,整个过程都能自动完成,大大提高了抢票的效率。它支持Python 3.6以上版本,并且功能一直在更新。许多人已经亲测成功使用了这个工具。 "py12306"是在"12306"的基础上开发出来的一个分布式抢票工具,它支持多台机器同时进行抢票操作。这个工具也非常受欢迎,获得了5000个星标。它使用了一个基于Python的框架Flask来开发web管理页面,方便用户进行配置和操作。 这些Python抢票软件在抢票过程中可以自动识别验证码,其中一种方法是调用打码平台来解决验证码问题。此外,还有一些模型可以用于本地识别验证码,用户可以下载并放置在项目根目录中使用。 总之,Python抢票软件是一种方便快捷的工具,可以帮助用户在购票高峰期快速抢到车票。 #### 引用[.reference_title] - *1* [GitHub 上 22 万star的第一抢票神器,3秒钟抢到!](https://blog.csdn.net/weixin_39016100/article/details/113409360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python自动抢火车票神器!!](https://blog.csdn.net/spider_py/article/details/112607107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值