前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Github上开源项目12306抢票工具帮你实现回家梦

Github上开源项目12306抢票工具帮你实现回家梦

作者头像
攻城狮的那点事
发布于 2019-12-26 08:05:44
发布于 2019-12-26 08:05:44
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

最近有发现github上的一个python项目抢票项目,可在自己笔记本上搭建环境并且部署好即可以实现自动打码、自动登录、准点预售和捡漏、智能候补、邮件通知。源代码地址如下:

https://codeload.github.com/testerSunshine/12306/zip/master。

特别说明:本项目属于爬虫类项目,如果商用可能会有法律风险,请各位读者谨慎使用,如果由于根据本文使用12306自动抢票软件引发法律纠纷,笔者并不承担。

12306抢票项目的安装和使用

目前“12306自动抢票”的Github官网上还没有一个完整的安装和布署攻略,这里我就把完整的安装流程向大家说明一下。不过目前本项目应该还只支持UBANTU等LINUX平台,这个项目的很多依赖项在WINDOWS平台上装非常麻烦,所以建议直接在UBANTU上布署,这样相对比较简单。

1.下载项目源码:

使用以下命令下载项目源码

代码语言:javascript
代码运行次数:0
运行
复制
git clone https://github.com/testerSunshine/12306.git
cd 12306

2.下载项目依赖的识别码打码模型

打开以下网址:https://github.com/testerSunshine/12306model,下载下图两个标红的模型文件,并放到12306项目的根目录(一般是~/12306)

3.安装项目依赖

使用以下命令下载项目依赖项,本项目的依赖项比较多,建议直接使用sudo安装更多稳妥,如果有报错,则需要单独去解决具体安装项的问题,目前看最主要的问题可能在于tensorflow的安装,不过由于不需要GPU的版本,所以直接安装应该也不会有什么问题。

代码语言:javascript
代码运行次数:0
运行
复制
sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

4.安装chromedriver

使用以下命令安装chromedriver,一般安装后会放在/usr/local/bin下,需要在配置文件的CHROME_PATH标签下填好

代码语言:javascript
代码运行次数:0
运行
复制
sudo apt-get install chromium-chromedriver

5.修改配置文件

修改“12306自动抢票”项目根目录下的TickerConfig.py,具体注释原作者已经写好了,如下:

代码语言:javascript
代码运行次数:0
运行
复制
关于软件使用配置说明,一定要看!!!
# ps: 如果是候补车票,需要通过人证一致性核验的用户及激活的“铁路畅行”会员可以提交候补需求,请您按照操作说明在铁路12306app.上完成人证核验
# 关于候补了之后是否还能继续捡漏的问题在此说明:软件为全自动候补加捡漏,如果软件候补成功则会停止抢票,发出邮件通知,但是不会影响你继续捡漏,
# 如果这个时候捡漏捡到的话,也是可以付款成功的,也就是说,捡漏+候补,可以最大程度提升抢票成功率

# 刷票模式:1=刷票 2=候补+刷票
TICKET_TYPE = 2

# 候补最晚兑现日期,目前软件为捡漏加自动候补,所以这个值一定要填,并且这个日期一定要填小于最长订票时间(30)
# 格式为日期+小时+分
# 举例:比如今天才可以买10.1号的票,比如你那个发车是10.1号上午两点,你兑现时间写到10.1晚上22点?
# t("#fromDate").val() + "#" + t("#dafaultTime").html().replace("时", "") + "#" + t("#dafaultMinutes").html().replace("分", ""),
J_Z_PARAM = "2019-09-28#22#59"

# 出发日期(list) "2018-01-06", "2018-01-07"
# ps: 日期如果是单日,一定要前面补个0,正确做法:2019-01-01, 错误做法:2019-1-1
STATION_DATES = [
    "2019-09-25"
]

# 填入需要购买的车次(list)"G1353"
STATION_TRAINS = [
    "",
]

# 出发城市,比如深圳北,就填深圳就搜得到
FROM_STATION = ""

# 到达城市 比如深圳北,就填深圳就搜得到
TO_STATION = ""

# 座位(list) 多个座位ex:
# "商务座",
# "一等座",
# "二等座",
# "特等座",
# "软卧",
# "硬卧",
# "硬座",
# "无座",
# "动卧",
SET_TYPE = [
    "",
]

# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
# bool
IS_MORE_TICKET = True

# 乘车人(list) 多个乘车人ex:
# - "张三"
# - "李四"
TICKET_PEOPLES = [
    "",
]

# 12306登录账号
USER = ""
PWD = ""

# 加入小黑屋时间默认为5分钟,此功能为了防止僵尸票导致一直下单不成功错过正常的票
TICKET_BLACK_LIST_TIME = 5

# 自动打码
IS_AUTO_CODE = True

#  邮箱配置,如果抢票成功,将通过邮件配置通知给您
#  列举163
#  email: "xxx@163.com"
#  notice_email_list: "123@qq.com"
#  username: "xxxxx"
#  password: "xxxxx
#  host: "smtp.163.com"
#  列举qq  ,qq设置比较复杂,需要在邮箱-->账户-->开启smtp服务,取得授权码==邮箱登录密码
#  email: "xxx@qq.com"
#  notice_email_list: "123@qq.com"
#  username: "xxxxx"
#  password: "授权码"
#  host: "smtp.qq.com"
EMAIL_CONF = {
    "IS_MAIL": False,
    "email": "",
    "notice_email_list": "",
    "username": "",
    "password": "",
    "host": "",
}

# 是否开启 pushbear 微信提醒, 使用前需要前往 http://pushbear.ftqq.com 扫码绑定获取 send_key 并关注获得抢票结果通知的公众号
PUSHBEAR_CONF = {
    "is_pushbear": False,
    "send_key": ""
}

# 是否开启cdn查询,可以更快的检测票票 1为开启,2为关闭
IS_CDN = 1

# 下单接口分为两种,1 模拟网页自动捡漏下单(不稳定),2 模拟车次后面的购票按钮下单(稳如老狗)
ORDER_TYPE = 2

# 下单模式 1 为预售,整点刷新,刷新间隔0.1-0.5S, 然后会校验时间,比如12点的预售,那脚本就会在12.00整检票,刷新订单
#         2 是捡漏,捡漏的刷新间隔时间为0.5-3秒,时间间隔长,不容易封ip
ORDER_MODEL = 2

# 是否开启代理, 0代表关闭, 1表示开始
# 开启此功能的时候请确保代理ip是否可用,在测试放里面经过充分的测试,再开启此功能,不然可能会耽误你购票的宝贵时间
# 使用方法:
# 1、在agency/proxy_list列表下填入代理ip
# 2、测试UnitTest/TestAll/testProxy 测试代理是否可以用
# 3、开启代理ip
IS_PROXY = 0

# 预售放票时间, 如果是捡漏模式,可以忽略此操作
OPEN_TIME = "13:00:00"
# 1=使用selenium获取devicesID
# 2=使用网页端/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直302的请改为配置1
COOKIE_TYPE = 1
# 如果COOKIE_TYPE=1,则需配置chromeDriver路径(注意是填你机器本地chromeDriver的路径,这个地方一定要改),下载地址http://chromedriver.storage.googleapis.com/index.html
# chromedriver配置版本只要和chrome的大版本匹配就行
# 如果是windows,最好在路径加上r, ex: r"/Users/wenxianping/Downloads/chromedriver"
CHROME_PATH = ""
PASSENGER_TICKER_STR = {
    '一等座': 'M',
    '特等座': 'P',
    '二等座': 'O',
    '商务座': 9,
    '硬座': 1,
    '无座': 1,
    '软座': 2,
    '软卧': 4,
    '硬卧': 3,
}
# 软件版本
RE_VERSION = "1.1.106"

6.运行程序开始抢票

直接使用以下命令进行抢票即可:

代码语言:javascript
代码运行次数:0
运行
复制
sudo python run.py

看到软件帮你自动抢票了

代码导读

总体而言这个抢票项目设计思路清昕,有很多地方值得一读,先给大家带来以下两部分

1,使用Selenium得到cookie的device_id,具体在~/config/getCookie.py

代码语言:javascript
代码运行次数:0
运行
复制
def getDrvicesID(session):
    """
    :return:
    """
    print("cookie获取中")
    if TickerConfig.COOKIE_TYPE is 1:
        from selenium import webdriver#导入Selenium包
        cookies = []
        options = webdriver.ChromeOptions()
        options.add_argument('headless')
        driver = webdriver.Chrome(chrome_options=options,             
        executable_path=TickerConfig.CHROME_PATH)#设置的chrome_driver的地址
        driver.get("https://www.12306.cn/index/index.html")
        time.sleep(10)
        #根据cookie的name来获得
        for c in driver.get_cookies():
            cookie = dict()
            if c.get("name") == "RAIL_DEVICEID" or c.get("name") == RAIL_EXPIRATION":
                cookie[c.get("name")] = c.get("value")
                cookies.append(cookie)
        if cookies:
            session.httpClint.set_cookies(cookies)
        print("cookie获取完成")
    elif TickerConfig.COOKIE_TYPE is 2:
        request_device_id(session)

2,是自动打码的部分,在~/verify/localVerifyCode.py

代码语言:javascript
代码运行次数:0
运行
复制
def verify(fn):
    backend.clear_session()
    verify_titles = ['打字机', '调色板', '跑步机', '毛线', '老虎', '安全帽', '沙包', '盘子', '本子', '药片', '双面胶', '龙舟', '红酒', '拖把', '卷尺', '海苔', '红豆', '黑板', '热水袋', '烛台', '钟表', '路灯', '沙拉', '海报', '公交卡', '樱桃', '创可贴', '牌坊', '苍蝇拍', '高压锅', '电线', '网球拍', '海鸥', '风铃', '订书机', '冰箱', '话梅', '排风机', '锅铲', '绿豆', '航母', '电子秤', '红枣', '金字塔', '鞭炮', '菠萝', '开瓶器', '电饭煲', '仪表盘', '棉棒', '篮球', '狮子', '蚂蚁', '蜡烛', '茶盅', '印章', '茶几', '啤酒', '档案袋', '挂钟', '刺绣', '铃铛', '护腕', '手掌印', '锦旗', '文具盒', '辣椒酱', '耳塞', '中国结', '蜥蜴', '剪纸', '漏斗', '锣', '蒸笼', '珊瑚', '雨靴', '薯条', '蜜蜂', '日历', '口哨']
    # 读取并预处理验证码
    img = base64_to_image(fn)#将img转换
    text = get_text(img)
    imgs = np.array(list(pretreatment._get_imgs(img)))
    imgs = preprocess_input(imgs)
    text_list = []
    # 识别文字
    model = models.load_model(PATH('../model.v2.0.h5'))#使用之前的model识别文字
    label = model.predict(text)
    label = label.argmax()
    text = verify_titles[label]
    text_list.append(text)
    # 获取下一个词
    # 根据第一个词的长度来定位第二个词的位置
    if len(text) == 1:
        offset = 27
    elif len(text) == 2:
        offset = 47
    else:
        offset = 60
    text = get_text(img, offset=offset)
    if text.mean() < 0.95:
        label = model.predict(text)
        label = label.argmax()
        text = verify_titles[label]
        text_list.append(text)
    print("题目为{}".format(text_list))
    # 加载图片分类器
    model = models.load_model(PATH('../12306.image.model.h5'))
    labels = model.predict(imgs)
    labels = labels.argmax(axis=1)
    results = []
    for pos, label in enumerate(labels):
        l = verify_titles[label]
        print(pos+1, l)
        if l in text_list:
            results.append(str(pos+1))
    return results

好了,以上就是对于12306抢票工具项目的全部简介,在这里也对项目的原作者testerSunshine表示感谢,同时也祝各位早日抢到回家的票!

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

本文分享自 攻城狮的那点事 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
图解机器学习 | 机器学习基础知识
教程地址:http://www.showmeai.tech/tutorials/34
ShowMeAI
2022/03/09
7980
图解机器学习 | 机器学习基础知识
机器学习简介
标题: 机器学习定义 人工智能、机器学习、深度学习的关系 机器学习的学习类别 数据(特征)的种类 几个空间的概念 机器学习的三要素 深度学习的兴起引领了人工智能的有一股热潮,特别是阿尔法狗(AlphaGO)在围棋中战胜了世界冠军之后,各大社交媒体大肆宣传,把深度学习形容的玄乎其玄,人工智能的概念就走进千家万户了。 回到正题,这篇推文旨在为大家普及一下机器学习的概念,以下是机器学习的介绍和定义。 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、
企鹅号小编
2018/02/26
6590
机器学习简介
机器学习,你不得不掌握的十大算法(上篇)
这是小詹关于机器学习的第①篇文章 ● 机器学习及其分类 我们知道,机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 按照学习方式进行分类,机器学习算法可分为监督式学习,非监督式学习和强化学习三种。 ① 监督学习目的是使用有类标的训练数据构建模型,利用训练得到的模型对未来数据进行预测,监督是指训练数据集中每一个
小小詹同学
2018/04/13
6880
机器学习,你不得不掌握的十大算法(上篇)
独家揭秘| 数据挖掘、机器学习和深度学习之间的区别
导读:机器学习是近20多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。很多推论问题属于无程序可循难度,所以部分的机器学习研究是开发容易处理的近似算法。 机器学习已广泛应
AI科技评论
2018/03/07
1.5K0
独家揭秘| 数据挖掘、机器学习和深度学习之间的区别
图解 72 个机器学习基础知识点
来源:尤而小屋 R语言统计与绘图本文约5500字,建议阅读11分钟本文梳理了机器学习最常见的知识要点。 图解机器学习算法系列 以图解的生动方式,阐述机器学习核心知识 & 重要模型,并通过代码讲通应用细节。 1. 机器学习概述 1)什么是机器学习 人工智能(Artificial intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。它是一个笼统而宽泛的概念,人工智能的最终目标是使计算机能够模拟人的思维方式和行为。 大概在上世纪50年代,人工智能开始
数据派THU
2023/03/29
8110
图解 72 个机器学习基础知识点
TensorFlow系列专题(一):机器学习基础
1956年的8月,美国达特茅斯学院(Dartmouth College)举行了一次研讨会,这次会议由约翰麦卡锡等人发起,会议上约翰麦卡锡首次提出了“人工智能”这个概念,这次会议也被公认为是人工智能诞生的标志。在这六十多年的时间里,人工智能的发展起起伏伏、忽“冷”忽“热”。而2016年AlphaGo与李世石的那场“世纪大战”则彻底点燃了大众的热情。当前人工智能成了一个“香饽饽”,很多国家都在积极争夺人工智能领域的话语权,各大公司也都不断加大在人工智能领域的投入。对于想要转行人工智能领域或者正在从事人工智能领域的从业者来说,当前是一个不折不扣的黄金时代。
磐创AI
2018/11/30
4240
TensorFlow系列专题(一):机器学习基础
走进机器学习:新手必看的完整入门指南
以维基百科为例:机器学习 机器学习是人工智能的一个分支。人工智能的研究历史有着一条从以“推理”为重点,到以“知识”为重点,再到以“学习”为重点的自然、清晰的脉络。显然,机器学习是实现人工智能的一个途径之一,即以机器学习为手段,解决人工智能中的部分问题。机器学习在近30多年已发展为一门多领域科际集成,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。 机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法(要防止错误累积)。很多推论问题属于非程序化決策,所以部分的机器学习研究是开发容易处理的近似算法。 用一句话来概况就是:机器学习(Machine Learning,简称 ML)是人工智能(AI)的一个子领域,关注于研究如何通过数据来使计算机系统自动改进和学习。与传统的编程方式不同,机器学习通过输入数据来训练模型,模型能够从数据中识别模式,并根据这些模式做出预测或决策,而不需要显式地编程规则。
Yui_
2024/12/20
3340
走进机器学习:新手必看的完整入门指南
机器学习-概述
简单的一句话:让机器从数据中学习,进而得到一个更加符合现实规律的模型,通过对模型的使用使得机器比以往表现的更好,这就是机器学习。
后端码匠
2021/08/19
4440
机器学习基本概念
多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
foochane
2019/05/23
3820
机器学习基本概念
机器学习该如何入门
引言   可能你对这个名字叫“机器学习”的家伙不是特别的了解,但是相信用过iPhone的同学都知道iPhone的语音助手Siri,它能帮你打电话,查看天气等等;相信大家尤其是美女童鞋都用过美颜相机,它能自动化的给我们拍出更漂亮的照片;逛京东淘宝的时候,细心的童鞋应该也会发现它们会有一个栏目“猜你喜欢”;最近异军突起的新闻客户端软件今日头条,它们就是会根据分析你的日常喜好给每个人推荐不同的新闻……没错,这些功能背后的核心就是今天要介绍的主题:机器学习。 什么是机器学习   对于这个问题的解释,说实话我很有压力
机器学习算法工程师
2018/03/06
7880
机器学习该如何入门
机器学习以及相关算法
机器学习是人工智能的一个分支。机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。现实问题抽象为数学问题,机器解决数学问题从而解决现实问题。
分母为零
2020/05/24
6380
机器学习学习笔记(1) -- 简析入门
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科;机器学习是一种偏向于技术的方法,研究目的包括模式识别、神经网络和深度学习;机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法,机器学习算法是一类从数据中自动分析获取规律并利用找到的规律对未知数据进行预测的算法。
挽风
2021/04/13
3410
机器学习:数据驱动的科学
机器学习,也被称为统计机器学习,是人工智能领域的一个分支,其基本思想是基于数据构建统计模型,并利用模型对数据进行分析和预测的一门学科。
博文视点Broadview
2020/06/11
9890
机器学习:数据驱动的科学
1,机器学习简介
人工智能指由人类制造出的机器表现出的智能。这是一个非常大的范围,长远目标是让机器实现类人智能。不过目前我们还在非常非常初级的阶段,甚至都不能称为智能。
lyhue1991
2020/07/20
4710
1,机器学习简介
机器学习
概念 什么是机器学习? 机器学习是英文名称Machine Learning(简称ML)的直译。机器学习涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。 相对于传统的计算机工作,我们给它一串指令,然后它遵照这个指令一步步执行下去即可。机器学习根本不接受你输入的指令,相反,它只
xiangzhihong
2018/01/26
1.1K0
分享 | 震惊,机器学习居然有这些事
机器学习是一类算法的总称,这些算法企图从大量历史数据中挖掘出其中隐含的规律,并用于预测或者分类,更具体的说,机器学习可以看作是一个函数,输入是样本数据,输出是期望的结果,只是这个函数过于复杂,以至于不太方便形式化表达。
潘永斌
2019/10/08
5100
分享 | 震惊,机器学习居然有这些事
【机器学习基础】初探机器学习
  我们生活在一个人工智能的时代!生活中现在已随处可见人工智能技术的影子。在大学的食堂,学生把打好菜的托盘放到摄像头下面,机器就可以自动识别每个餐盘的形状来自动计算这顿饭的价格;而在校园的大部分电梯里,学生可以说例如“我要去3楼”,电梯则可以自动带学生去3楼,这在疫情期间更加方便卫生。或许对于“20后”的孩子们而言,智能就像能源一样从他们记事起就随处可见、随手可得,就像移动互联网之于“10后”一样。
Francek Chen
2025/01/23
860
【机器学习基础】初探机器学习
机器学习系列--KNN分类算法
Dlimeng
2023/06/29
2590
【机器学习】机器学习基础概念与初步探索
综上所述:监督学习、无监督学习与强化学习各有其特点和优势,适用于不同的应用场景。在实际应用中,我们需要根据具体问题和数据特点来选择合适的机器学习类型。
Eternity._
2024/06/14
1340
【机器学习】机器学习基础概念与初步探索
机器学习算法入门
问题导读 1.什么是程序? 2.什么是算法? 3.什么是机器学习算法? 4.机器学习的主要任务是什么? 5.机器学习+数据库=? 6.什么是自然语言处理? 什么是程序(Program) 计算机程序,是指为了得到某种结果而可以由计算机(等具有信息处理能力的装置)执行的代码化指令序列(或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列)。 通俗讲,计算机给人干活,但它不是人,甚至不如狗懂人的需要(《小羊肖恩》里的狗是多么聪明可爱又忠诚于主人)。那怎么让它干活呢,那就需要程序员用某种编程
用户1410343
2018/03/27
7290
机器学习算法入门
相关推荐
图解机器学习 | 机器学习基础知识
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档