12306网站源码分享,12306原理

各位老铁们,大家好,今天由我来为大家分享12306网站源码分享,以及12306原理的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

有不到三个月就过春节了,你回家的火车票都买了吗?如果没有买到的话,不妨试用下本文的Python程序来帮你抢火车票,也可以帮你的家人和朋友来抢票,顺带学习一下Python爬虫技术,可谓一举两得,何乐而不为?

关注,转发,私信小编“01”即可免费获取12306源代码+python学习资料!

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

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

项目简介:hack12306.py是一个Python3.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,再按下方的步骤来操作即可。程序的流程图如下:

流程图.jpg

步骤一、环境准备

1、安装chromedriver由于程序使用chrome浏览器,因此需要安装chromedriver,其实很简单,就是下载自己电脑上chrome浏览器对应的chromedriver即可,网上bing一下就找到了,也可参考之前的文章Python云端学习中chromedriver的安装方法。我分享在网盘里chromedriver对应的chrome浏览器版本为71.0.3578.98,不过也没有那么严格,只要是较新的chrome浏览器都可以使用我提供的这个chromedriver。将chromedriver放在一个你想放置的目录下,这个路径需要配置在配置文件中。

2、安装依赖的Python三方库安装自动化工具库splinter和邮件发送模块zmail。直接命令行执行

pipinstallsplinter\npipinstallzmail\n

步骤二、修改配置文件

配置文件config.ini需要修改以下几个地方:1、你的12306账号、密码

登陆账号和密码\n[login]\npassword:12306登录密码,必选参数\npassword=填写你的12306密码\n

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

cookie信息,出发站,目的站\n[cookieInfo]\nends:对应搜索框目的地,必选参数,请输入中文名称,例如:南京\nends=信阳\n乘客姓名需要提前加入到登录的12306账号的联系人中,为了程序自动选择乘客姓名\n[userInfo]\nusers=郑征\n

4、chromedirver的路径

路径信息\n[pathInfo]\nexecutable_path:浏览器驱动路径,必选参数\n验证码需要自行输入,程序自旋等待,直到验证码通过,点击登录\n34;完成验证:Y/N:&39;Y&39;y&输入其他值,程序退出\nexit(0)\nifself.driver.url!=self.initmy_url:\nelse:\n你的邮件内容\nmail_content={\n&39;:subject,39;content_text&邮件正文写在这\n}\n发送邮件指令\nserver.send_mail([self.receiver],mail_content)\n

3、调整等待时间。有些时候由于网络延迟某些按钮等元素还未加载出来就被程序发送了点击命令,此时会报错,通过适当延长等待时间可以解决这个问题,就是调节代码中的time.sleep(n)中的n的值,如下图所示:

调整等待时间

4、运行结果。程序运行后会自动打开12306的页面登陆,并自动输入配置文件中的用户名和密码,点击验证码登陆后,在后台命令窗口输入Y,然后就可以看到浏览器在不停止的查询余票信息,当有符合条件的车票时将自动下单,并邮件通知。如果第一次运行后报错了,那么请重试一次,一般第二次就不报错了。

Snipaste_2019-01-05_17-45-37.png

后台打印的信息如下所示:

===========hack12306begin===========\n映射出发地、目的地…\n加载配置文件…\n\nDevToolslisteningonws://127.0.0.1:58067/devtools/browser/4426bbf5-49ca-439a-b73e-9217ececf3ea\n开始登录…\n等待验证码,自行输入…\n完成验证:Y/N:Y\n购票页面开始…\n———>选择的车次类型D-动车\n———>选择的车次类型GC-高铁/城际\n———>选择的发车时间00:00–24:00\n循环点击查询…第1次\n———>选择的车次类型D-动车\n———>选择的车次类型GC-高铁/城际\n———>选择的发车时间00:00–24:00\n循环点击查询…第2次\n———>选择的车次类型D-动车\n———>选择的车次类型GC-高铁/城际\n———>选择的发车时间00:00–24:00\n循环点击查询…第3次\n———>选择的车次类型D-动车\n———>选择的车次类型GC-高铁/城际\n———>选择的发车时间00:00–24:00\n循环点击查询…第4次\n———>选择的车次类型D-动车\n———>选择的车次类型GC-高铁/城际\n———>选择的发车时间00:00–24:00\n循环点击查询…第5次\n———>选择的车次类型D-动车\n———>选择的车次类型GC-高铁/城际\n———>选择的发车时间00:00–24:00\n循环点击查询…第6次\n……\n

5、关于12306的验证码。这验证码可以说是无敌了,连人有时侯都难以分辨。不过仍有人破解这个验证码,准确率可以说是相当高了,可以点击下面的链接了解详情。https://github.com/andelf/fuck12306

6、生成windows可执行程序。如果你想让自己的Python程序发给不懂Python的人使用,还是编译成exe发给他们好用,省得安装各种依赖包。这里说下如何将python源文件编译为exe文件。工具有很多,坑也很多,不建议过多研究,作为学习者直接运行源代码妥妥的。这里使用pyinstaller。先安装打包工具:

pipinstallpywin32\npipinstallPyInstaller\n

在源代码所在的目录下执行命令:

pyinstaller-Fhack12306.py\n

等待完成即可在dist目录找到可执行的exe文件。

如果代码使用了第三方库,则需要将第三方库包也放在源代码所在的目录,如本例中的:

7、附部分源码:

defselUser(self):\nprint(u&39;)\nforuserinself.users:\nself.driver.find_by_text(user).last.click()\n\ndefconfirmOrder(self):\nprint(u&34;)\nifself.seatType:\nself.driver.find_by_value(self.seatType).click()\nelse:\nprint(u&34;)\n\ndefsubmitOrder(self):\nprint(u&34;)\nsleep(1)\nself.driver.find_by_id(&39;).click()\n\ndefconfirmSeat(self):\n34;确认选座…&34;硬座余票<strong>0</strong>张&39;qr_submit_id&39;back_edit_id&39;qr_submit_id&34;购票页面开始…&填充查询条件\nself.preStart()\n\n预定车次算法:根据order的配置确定开始点击预订的车次,0-从上至下点击,1-第一个车次,2-第二个车次,类推\nifself.order!=0:\n默认选票\nself.buyOrderZero()\nprint(u&34;)\n\nsleep(1)\n确认订单\nself.confirmOrder()\n确认选座\nself.confirmSeat()\n34;抢到票了&34;请及时付款”)\n\nprint(time.clock()-t)\n\nexceptExceptionase:\nprint(e)\n

关于12306网站源码分享和12306原理的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平