python判断火车票座位_Python抢票程序优化,可以选择车次和座次

Python抢票程序优化,可以选择车次和座次

阅读文本大概需要 5 分钟。

pk 哥在元旦前写了一篇关于自动化抢票的程序

用Python抢火车票加邮件通知,同时建了一个火车票助力群,本来只是写着玩玩,增加抢票的另一种途径而已。没想到短短几天,群里加了将近 150 名小伙伴,这也预示春节的火车票真是一票难求啊。

Python抢票程序优化,可以选择车次和座次

pk 哥写这个程序的初衷是因为去年我的返程票是通过手动不停的刷新点击抢到的,我想着能不能通过程序自动化去刷新并点击抢票,所以就有了这个 Python 抢票程序。

毕竟这个程序是 Python 模拟手工去操作浏览器的,所以会因为各种网络或者其他因素导致程序终止,群里反馈最多的就是增加车次选择功能和座次选择功能。本文主要讲解这两个优化点,群里也有很多小白也在用这个程序,所以本文会对一些详细的参数配置进行说明。

自动抢票流程

首先,梳理下本次优化后的抢票流程。

自动启动浏览器,自动化输入程序里设置好的 12306 的登录账号和密码。

自己手动输入验证码,图形验证码设别功能太复杂,涉及到人工智能的图像识别,自己做的话成功率不高,所以我这里让大家手动输入,输入验证码后手动点击「登录」按钮。

登录成功后页面会自动校验,确认登录成功后会自动跳转到查票页面。根据自己程序代码里输入的出发地和目的地进行查票。

根据自己输入的车次进行查询右边「预定」按钮是否高亮可点,不可点的话会一直点击「查询」按钮不断的刷新页面直到出现有票点击「按钮」按钮。

提交订单页面,选择乘客,选择座位类型,如果没有自己想要的类型,比如,二等座,页面会重新回到火车票查询页面,重新查询,如此循环。

抢到你想要的票后,提交订单,发送邮件,完成!

登录页面

这部分我把浏览器窗口最大化了,之前没设置全屏,大家电脑显示屏大小不一样,可能出现有些元素被遮挡无法点击。

登录之后可能会出现网络可能出现的问题的提示,估计是服务器的问题,这时手动点一下左上角的返回,一般就可以恢复正常,如果点一次还是这个提示,那就点两次吧。

Python抢票程序优化,可以选择车次和座次

查询页面

查询火车票页面,这个页面峰值时间时也会出现超时的提示,估计是访问的人数过多导致服务器异常导致的,有时候很快就能查到票,具体什么时候我也没找到规律。

Python抢票程序优化,可以选择车次和座次

这个我们也无法避免,程序会自动的帮我们刷新直到刷新出有票的页面,刷新频率:1 秒/次。

车次选择功能是大家比较关心的功能,之前是 order = 0 默认是全部车次,这次大家可以根据车次的位置输入相应的数字,比如要预定的车在第 5 行,你把 order = 5 就行,关于这些参数配置,下面会专门给大家列出来。

提交订单页面

提交订单页面程序会做两件事,第一个是根据你输入的乘客姓名进行选择,第二件事是根据是输入的座次进行判断,你想要的座次有票的话就会选择并提交订单,你想要的座次没票的话就会返回到上一级页面,重复查询车票,检查座次,如此循环,直到订到你想要的票。

Python抢票程序优化,可以选择车次和座次

邮件通知

邮件通知功能之前单独有写过一篇文章,大家如果不确定邮件通知功能是否有效的话可以单独把这部分源码拿出来,运行看看是否能发送成功,源码在公众号回复「邮件」获取,关于邮件通知的文章戳这里查看

Python抢票程序优化,可以选择车次和座次

30行Python代码实现自动收发邮件。

重要参数修改说明

重点来了,前面看不懂没关系,想直接拿源码运行的务必仔细看这里,拿到抢票源码后以下事项需要注意并配置。

Python 环境配置

本次程序我用的 Python 环境是 Python 3.6 的版本,其实 3.5 以上的应该都可以。官网上下载 Python3 的安装包,安装时记得勾选 Add Python 3.x to PATH 这个选项,勾选这个选项的好处是安装完成后它会自动帮你配置环境变量,不用像安装 Python2.x 时需要手动去配置。接下来都是傻瓜式安装,安装完成后终端下输入 Python 显示版本的话表示安装成功。还不会的话建议上网查查,网上教程很多。

Python抢票程序优化,可以选择车次和座次

pip 工具

pip 是通用的 Python 库管理工具,使用 pip 很方便的安装、管理库。第一步完成后这个 pip 工具是自带的,你可以在终端下输入 pip list 命令查看你当前安装的所有 Python 库。

Python抢票程序优化,可以选择车次和座次

安装导入相应的库

本程序主要用到的库是 splinter,主要用这个库来驱动浏览器进行操作页面的,用 pip 命令直接安装。

pip install splinter

Splinter 相关的教程中文文档地址如下,如有兴趣的话可以学习一下。

https://splinter-docs-zh-cn.readthedocs.io/zh/latest/tutorial.html

安装完成后在 IDE 中用 import 导入这个库,如果还不能用的话记得在编辑器中安装引入一下,我用的是 Pycharm 编辑器,在设置中引入安装,见下图。

Python抢票程序优化,可以选择车次和座次

Python 发送邮件需要用到 Python 自带的两个模块,smtplib 和 email。直接 import 导入,无需下载。

所以,真正需要安装的只有 splinter 库,其他直接导入就可用,在编辑器中导入。

from splinter.browser import Browser

from time import sleep

import smtplib

from email.mime.text import MIMEText

from email.utils import formataddr

from email.header import Header

浏览器驱动下载并指定路径

这个问题大家也出现比较多,为什么要下载浏览器驱动呢?因为 splinter 库的底层原理是通过 WebDriver 去驱动浏览器做相应的操作的,所以使用对应的浏览器必须要下载对应的浏览器驱动。我用的是 chrome 浏览器,所以我下载的是 chromedriver,这里还有个坑,chromedriver 和 chrome 浏览器有映射关系,你必须下载对应的版本。映射关系如下,大家先查看你的 chrome 浏览器版本,再下载对应的 chromedriver,chromedriver 下载地址点击「阅读原文」可查看。(左右滑动查看全部)

ChromeDriver v2.43 (2018-10-16)----------Supports Chrome v69-71

ChromeDriver v2.42 (2018-09-13)----------Supports Chrome v68-70

ChromeDriver v2.41 (2018-07-27)----------Supports Chrome v67-69

ChromeDriver v2.40 (2018-06-07)----------Supports Chrome v66-68

ChromeDriver v2.39 (2018-05-30)----------Supports Chrome v66-68

ChromeDriver v2.38 (2018-04-17)----------Supports Chrome v65-67

ChromeDriver v2.37 (2018-03-16)----------Supports Chrome v64-66

ChromeDriver v2.36 (2018-03-02)----------Supports Chrome v63-65

ChromeDriver v2.35 (2018-01-10)----------Supports Chrome v62-64

(Chrome 和ChromeDriver 映射表)

chromedriver 下载解压完成后把他的路径复制下来,替换源码 33 行中的路径。

Python抢票程序优化,可以选择车次和座次

邮件通知功能设置

上面安装了对应的库后,需要填写的信息如下:发件人和收件人邮箱、发件人的授权码。所以需要修改的位置是 sendMail 函数中的 51 行和 52 行的发件人邮箱账号和收件人邮箱账号,61 行的发件人邮箱的授权码。

Python抢票程序优化,可以选择车次和座次

授权码获取方法参考文章

Python抢票程序优化,可以选择车次和座次

30行Python代码实现自动收发邮件,我用的发邮件的邮箱是我的小号 QQ 邮箱,收件人邮箱是我的大号 QQ邮箱。我试了下,QQ 邮箱里发件人和收件人可以是一样的,也就是可以自己给自己发邮件,大家自行选择,建议先独立把发邮件的代码运行下,查看是否发送成功,一般运行失败就是因为授权码不对造成的,重新获取一次授权码好了。公众号回复「邮件」获取发邮件功能的源码。

座次对应的数值

经过调试查看,不同的座次对应的 value 值不一样。

Python抢票程序优化,可以选择车次和座次

多次调试之后,我把不同座次对应的 value 值整理成了表格。

Python抢票程序优化,可以选择车次和座次

代码修改位置在源码 112 行和 113 两行,两行都要改动,改动成你想要的座次对应的 value 就行。

12306 用户名和 12306 登录密码

这两项在 main 函数中修改成自己的就行,把源码 114 和 145 行修改成自己的即可。

车次选择

车次用了 order 字段来表示,

0 代表所有车次,1 表示第一行的车次,2 表示第二行的车次,以此类推。一般你输入出发点和目的地后,所有的车次位置是固定的,你输入你想订的车次的位置数字即可。源码修改位置也是在 main 函数里,第 146 行。

乘客名格式

乘客名,比如 passengers = ['XXX', 'XXX'],支持多选,注意下学生票需注明,注明方式为:passengers = ['XXX(学生)', 'XXX'],不然会报错,源码修改位置也是在 main 函数里,第 149 行。

乘车日期格式

乘车日期,格式为:'2019-01-28',源码修改位置也是在 main 函数里,第 151 行。

出发地和目的地 cookie 获取

这个由于时间问题,没有优化,目前只能手动去查找获取出发地和目的地,打开自己的 12306 查询火车票页面,输入出发地和目的地。将页面的调试模式打开,用快捷键 F12 或者鼠标右键「检查」打开调试模式,选择 Network,点击「查询」按钮,这样就能获取对应出发地和目的地的 cookie。源码修改位置也是在 main 函数里,第 153 行和 155 行。

Python抢票程序优化,可以选择车次和座次

总结下,以上需要修改的地方,chromedriver 路径:在初始化函数 init 里面、邮件通知功能收发邮箱账号和发件人授权码在 sendMail 函数中修改、修改对应座次 value 值在 check_ticket 函数中修改、其他信息包括:12306用户名、12306密码、车次选择、乘客名、乘车日期、出发日期、出发地和目的地 cookie 值,都在源码最下方的 main 函数中修改。

Python抢票程序优化,可以选择车次和座次

重要说明:本程序由于时间有限,配置项也挺多的,但是为了抢到票,我们只能多尝试一种方法了,本程序是模拟人工操作浏览器,还是会存在很多问题的,比如说由于网络关系导致页面长时间停留从而找不到元素而程序停止,其他各种预想不到的问题也会出现,程序停止的话也只能重启下程序继续抢,后期大家需要的话我也会慢慢优化。欢迎大家在抢票群里一起优化讨论,毕竟我也要工作,个人时间有限。大家也不要把它当做唯一的抢票工具,我们还是要把其他的抢票工具一起用起来,所以我建火车票助理群的目的也是为了让大家有更多的途径抢到票,回家过年,大家相互点点助力,这样抢到额概率更大一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

核桃编程:前端可观测性建设之路

简介: 随着核桃编程业务的快速增长,核心应用的系统规模和系统复杂度也在经历翻天覆地的变化。核桃技术团队不断通过新兴的技术手段维护整套系统架构的技术先进性。在3 年时间里,技术团队至少对整体系统架构进行了 6 次以上的重大重构&#xf…

少拿游戏来骗我,虚幻引擎5上的《黑客帝国》全新体验,画面帅到爆

整理 | 禾木木 出品 | CSDN云计算(ID:CSDNcloud) 近日,由 Epic Games 发行的虚幻引擎 5 体验上线了。 以华纳兄弟公司电影《黑客帝国》为背景,由拉娜 沃卓斯基担任编剧和导演,基努 里维斯和凯瑞 - 安 莫…

python变量使用前必须先声明、并且一旦声明_初学者学习Python的30天‍-第18天-文件处理...

前文最近不是出了一个30天的Python教程,有很多人私信我说没有资料怎么跟着学习,现在他来了https://www.bilibili.com/read/cv9383238今天,我探讨了如何使用Python处理文件并与文件进行通信。这些天来,我一直在探索和分享各种Pytho…

金融数据智能峰会 | 数据规模爆炸性增长,企业如何进行精准决策?云原生数据仓库数据化运营实战分享

简介: 在日前的2021阿里云金融数据智能峰会——《云原生驱动数智化运营的“增长黑马”》专场上,阿里云数据库资深技术专家魏闯先 从数据价值链路角度切入,为大家解读云原生数据仓库如何支撑数据化运营、全链路营销和阿里集团双11业务&#xf…

redistemplate.opsforvalue 设置不过期_民法典即将实施!“离婚冷静期”倍受关注

还有不到一个月,“离婚冷静期”就要落地了。2021年1月1日起,《中华人民共和国民法典》(以下简称“《民法典》”)将正式施行。作为与老百姓日常生活关系最为紧密的一部法律,《民法典》的制定和施行备受关注,其中尤以“离婚冷静期”…

到底是无线最难?还是核心网最难?

作者 | 小枣君来源 | 鲜枣课堂今天这篇文章,我们来探讨一个通信行业的长期争议话题——到底是无线最难?还是核心网最难?众所周知,通信行业虽然对外统称“通信”,但实际上,内部却分为三个细分板块&#xff0…

谈谈C++新标准带来的属性(Attribute)

简介: 从C11开始,标准引入了一个新概念“属性(attribute)”,本文将简单介绍一下目前在C标准中已经添加的各个属性以及常用属性的具体应用。 作者 | 寒冬 来源 | 阿里技术公众号 从C11开始,标准引入了一个新概念“属性(attribute)…

python启蒙视频_python启蒙阶段

数学运算Python使用与C、Java类似的运算符,支持整数与浮点数的数学运算。同时还支持复数运算与无穷位数(实际受限于计算机的能力)的整数运算。除了求绝对值函数abs()外,大多数数学函数处于math和cmath模块内。前者用于实数运算,而后者用于复数…

mmap函数_分析由 mmap 导致的内存泄漏

背景一个程序链接 TCMalloc ,同时调用 mmap / munmap 管理一部分较大的内存通过 TCMalloc 的统计信息,判断内存泄漏不是由 new / malloc 等常规接口导致的因此怀疑是 mmap 导致的内存泄漏hookhook mmap / munmap 记录下每一次调用,可以分析出…

如何一站式快速构建企业全场景数据库管理平台?

简介: Gartner 的报告显示预计到2022年将有75%数据库将采用云数据库,与此同时,IDC预计到2024年传统部署数据库市场将达到13亿美元,企业数字化转型升级,积极拥抱开源、云原生数据库成为重要趋势,也是必然选择…

编程能力差,学不好Python、AI、Java等技术,90%是输在了这点上!

据了解,超90%的人在学习Python、Java、AI等技术时,都是在网上随便找个入门的教程就开始学起来。然而多数人在看了不少教程后,还是很难独立完成项目,甚至反思自己为什么学了这么久编程能力还是这么差!因为你在刚刚开始学…

更丰富的云原生应用治理能力让业务快速生长

简介: 据 Gartner 的报告显示,到 2022 年将有 50% 的应用软件将容器化,2023 年高可控应用 PaaS 的市场规模将达到 332 亿元,年复合增长率约为 18.7%。企业数字化转型的道路上,积极拥抱云原生,加速业务系统容…

语法糖 python_Python___语法糖

Python___语法糖import timedef timer(func):def deco():start_timetime.time()func()stop_timetime.time()print("the func run time is %s" %(stop_time-start_time))return decodef test1():time.sleep(3)print(in the test1 !!!!!)print(timer(test1))test1timer…

python循环一百次_python循环

解决重复操作,循环避免了出现大量的重复操作。比如要计算123,我们可以直接写表达式>>> 1 2 36但是要计算1~100的累加和,我们不可能一个一个的去加,为了让计算机能计算成千上万次的重复运算,我们就需要循环语句。forPyt…

“建木”萌芽,聚木成林

据 Github 2021 年度报告显示,目前 Github 用户数已超 7300 万,中国 Github 开发者 755万,开源吞噬世界的当下,越来越多中国开发者和企业积极参与开源建设。 有一位从事开源 10 多年的从业人员,戏称自己为未来希望成为…

还在为多集群管理烦恼吗?RedHat 和蚂蚁、阿里云给开源社区带来了OCM

简介: 为了让开发者、用户在多集群和混合环境下也能像在单个 Kubernetes 集群平台上一样,使用自己熟悉的开源项目和产品轻松开发功能,RedHat 和蚂蚁、阿里云共同发起并开源了 OCM(Open Cluster Management,项目官网 &a…

lol模型导入ue4_Houdini amp; UE4 程序化建模——石头(一)基础工作流

导言最近程序化建模的风气在国内兴起,建立好程序化建模流程,通过调参就可以生成丰富的美术资源。可以程序化建模的内容有很多,国外的程序化曼哈顿、林中小屋等都是很好的例子,所有带有规律的模型都可以程序化来做。程序化可以做从…

linux mysql 开启异步io_Linux 异步IO介绍

使用范例:epoll最多的用途就是socket编程,可以大大提高服务器的性能,此处我们实现一个简单的http服务器。 #define MAXFDS 128#define EVENTS 100#define PORT 8080#define MAXEPOLLSIZE 1024*10typedef enum{false,true}bool;/*************…

iOS 端容器之 WKWebView 那些事

简介: 本文主要是关于在端容器设计开发过程中,WKWebView 使用上遇到的一些问题和解决办法。 一 背景 熟悉 iOS\macOS Hybrid 混合开发的同学应该都有体会,WKWebView 虽然是苹果作为替代 UIWebView\WebView 而推出的"新"组件&…

95后热搜哪些事,夸克用AI引擎发布2021年度关键词

编辑 | 宋慧 出品 | CSDN 云计算 岁末将至,哪些心潮澎湃的瞬间与难以忘怀的言语,能够代表你的2021? 12月14日,在夸克Meet AI开放日上,阿里巴巴智能信息事业群旗下的智能搜索APP夸克与中国传媒大学互联网信息研究院联合…