Python骚操作-自动抢火车票

本文介绍了一种使用Python编写的自动抢火车票程序,该程序基于github上的开源项目,并进行了改进,增加了邮件提醒功能。程序使用splinter库自动化操作网页,支持配置出发地、目的地、乘车日期、时间等,需要手动输入登录验证码。用户可通过修改配置文件设置购票信息,程序运行后会自动查询并尝试购买符合条件的车票,成功后发送邮件通知。
摘要由CSDN通过智能技术生成

平常回家、出去玩或者碰上急事的时候,买火车票好像并不是一件容易的事情,尤其是遇上春运,那么,不妨试用下本文的 Python 程序来帮你抢火车票,也可以帮你的家人和朋友来抢票,顺带学习一下 Python 爬虫技术,可谓一举两得,何乐而不为?

我本来想自己写一个练练手的,但是转眼一想,Python 本身最大的优势是什么,不就是有很多牛逼的人已经造好轮子了吗?你只需要知道这些轮子并会使用就行了,这样会节省你大量的精力和时间,而且站在巨人的肩膀上,会看得更远。于是我在 github 上一搜索,果然有不少抢票程序,有的是 Python2,有的是 Python3,按 start 数据排序,经过亲自使用和对比,我选择了一个相对较好用的程序,并稍加以改进和完善。

项目 github 地址:https://github.com/xiaoshun007/12306Python,在此感谢作者 xiaoshun007 的分享。

项目简介:hack12306.py 是一个 Python 3.x 版的12306.cn自动订票程序。利用splinter(一个开源的用来通过python自动化测试web的工具),让电脑自动操作网页。

支持的功能:

1、支持配置出发地、目的地、乘车日

2、支持配置车次类型(动车、高铁等)

3、支持配置出发时间

4、需要手动输入登录验证码

5、支持配置预定车次的选择顺序(使用 order 字段配置,数字0:从上至下选择;数字x(1、2、3、4…):车次从上到下的序号,配置2表示列表中的第二个车次)

6、支持预定、购票自动完成

7、支持配置文件路径指定

8、支持席别指定

9、支持是否允许分配无座

还不支持的功能:

1、邮件提醒
于是,我在此基础上,加入邮件提醒的功能,并修复一些小 bug,公众号后台回复关键字【12306】获取我完善后的抢票程序源码,再按下方的步骤来操作即可。程序的流程图如下:

在这里插入图片描述
步骤一、环境准备

1、安装 chromedriver

由于程序使用 chrome 浏览器,因此需要安装 chromedriver,其实很简单,就是下载自己电脑上 chrome 浏览器对应的 chromedriver 即可,网上bing 一下就找到了,也可参考之前的文章Python 云端学习 中 chromedriver 的安装方法。

我分享在网盘里 chromedriver 对应的 chrome 浏览器版本为 71.0.3578.98,不过也没有那么严格,只要是较新的 chrome 浏览器都可以使用我提供的这个 chromedriver 。将 chromedriver 放在一个你想放置的目录下,这个路径需要配置在配置文件中。

在这里插入图片描述

2、安装依赖的 Python 三方库
安装自动化工具库 splinter 和 邮件发送模块 zmail 。直接命令行执行
在这里插入图片描述

    pip install splinter
    pip install zmail

步骤二、修改配置文件
配置文件 config.ini 需要修改以下几个地方:

1、你的12306账号、密码

    ## 登陆账号和密码
    [login]
    ### username:12306登录用户名,必选参数
    username= 填写你的12306用户名
    ### password:12306登录密码,必选参数
    password= 填写你的12306密码

2、你要买票的始发站,终点站,日期

    ## cookie信息,出发站,目的站
    [cookieInfo]
    ### starts:对应搜索框出发地,必选参数,请输入中文名称,例如:武汉
    starts=苏州
    ### ends:对应搜索框目的地,必选参数,请输入中文名称,例如:南京
    ends=信阳
    ### dtime:对应搜索框出发日,必选参数,时间格式:年-月-日,例如 2018-01-19
    ## 时间格式2018-01-19
    dtime=2019-02-02

3、你要为其买票的人姓名

    ## users:乘客姓名,必选参数,中文姓名,支持多个乘客,用英文逗号隔开,例如:张三,李四
    ### 乘客姓名需要提前加入到登录的12306账号的联系人中,为了程序自动选择乘客姓名
    [userInfo]
    users = 郑征 

4、chromedirver 的路径

#

    # 路径信息
    [pathInfo]
    ### driver_name: 浏览器名称,必选参数
    driver_name = chrome
    ### executable_path: 浏览器驱动路径,必选参数
    ### windows路径例如:C:\Users\sanshunfeng\Downloads\chromedriver.exe
    executable_path = E:\GitHub\python\pachong\tools\chromedriver.exe

5、发送邮件的配置信息

    [mail]
    mail_user = 你的邮箱如 :somenzz@163.com
    mail_pwd = 你的密码
    receiver = 你的收件地址:如 somenzz@163.com

其他如要买车次类型,几等座,顺序号等参考配置文件的注释进行修改即可 ,大多数人使用默认的配置就够了。

步骤三、运行源代码
直接在命令行执行

    python hack12306.py

在这里插入图片描述
即可自动读取配置文件并运行自动抢票程序。

代码修改说明:

1、手工确认登陆成功。程序在登陆12306网站后,12306可能会跳转到出现问题的报错页面,提示“网络可能出现问题的页面”(可能是一种反爬虫措施),此时程序将陷入无限等待。为防止此种情况发生,我这边将将自动检查登陆结果的程序替换为手工检查,点击验证码登陆后,请在命令行界面输入 “Y”,即可使程序继续运行,这个修改是通用的,不论是否跳出网络错误页面均可运行。

    # 验证码需要自行输入,程序自旋等待,直到验证码通过,点击登录
    # 为防止跳转错误页面陷入死待,此处改为手工确认。
    confirm = input("完成验证:Y/N: ")
    
  • 14
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值