12306购票辅助工具

article/2025/8/19 20:28:20

前段时间在GitHub上看到一段刷票的脚步代码,下下来稍稍改了下加了个简陋的UI界面,另外把车站列表等信息弄成了csv文件,方便不改源码的情况下添加车站。

先上核心内容:

        try:if hasattr(print_func, '__call__'):print_func('开始刷票……')# print('开始刷票……')# 加载车票查询信息self.driver.cookies.add({"_jc_save_fromStation": self.from_station})self.driver.cookies.add({"_jc_save_toStation": self.to_station})self.driver.cookies.add({"_jc_save_fromDate": self.from_time})self.driver.reload()count = 0while self.driver.url == self.ticket_url:try:self.driver.find_by_text('查询').click()except Exception as error_info:print(error_info)sleep(1)continuesleep(0.5 * refresh_times)count += 1local_date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())if hasattr(print_func, '__call__'):print_func('第%d次点击查询……[%s]' % (count, local_date))# print('第%d次点击查询……[%s]' % (count, local_date))try:for car_no in self.numbers:current_tr = self.driver.find_by_xpath('//tr[@datatran="' + car_no + '"]/preceding-sibling::tr[1]')if current_tr:current_time = current_tr.find_by_css('.start-t').textif current_tr.find_by_tag('td')[self.seat_type_index].text == '--':if hasattr(print_func, '__call__'):print_func('%s无此座位类型出售……' % (car_no + '(' + current_time + ')',))# print('%s无此座位类型出售……' % (car_no + '(' + current_time + ')',))sleep(0.2)elif current_tr.find_by_tag('td')[self.seat_type_index].text == '无':if hasattr(print_func, '__call__'):print_func('%s无票……' % (car_no + '(' + current_time + ')',))# print('%s无票……' % (car_no + '(' + current_time + ')',))sleep(0.2)else:# 有票,尝试预订if hasattr(print_func, '__call__'):print_func(car_no + '(' + current_time + ')刷到票了(余票数:' + str(current_tr.find_by_tag('td')[self.seat_type_index].text) + '),开始尝试预订……')# print(car_no + '(' + current_time + ')刷到票了(余票数:' + str(#     current_tr.find_by_tag('td')[self.seat_type_index].text) + '),开始尝试预订……')current_tr.find_by_css('td.no-br>a')[0].click()sleep(1)key_value = 1for p in self.passengers:if '()' in p:p = p[:-1] + '学生' + p[-1:]# 选择用户if hasattr(print_func, '__call__'):print_func('开始选择用户……')# print('开始选择用户……')self.driver.find_by_text(p).last.click()# 选择座位类型if hasattr(print_func, '__call__'):print_func('开始选择席别……')# print('开始选择席别……')if self.seat_type_value != 0:self.driver.find_by_xpath("//select[@id='seatType_" + str(key_value) + "']/option[@value='" + str(self.seat_type_value) + "']").first.click()key_value += 1sleep(0.5)if p[-1] == ')':self.driver.find_by_id('dialog_xsertcj_ok').click()sleep(0.1)if hasattr(print_func, '__call__'):print_func('正在提交订单……')# print('正在提交订单……')self.driver.find_by_id('submitOrder_id').click()sleep(1)# 查看放回结果是否正常submit_false_info = self.driver.find_by_id('orderResultInfo_id')[0].textif submit_false_info != '':print(submit_false_info)self.driver.find_by_id('qr_closeTranforDialog_id').click()sleep(0.2)self.driver.find_by_id('preStep_id').click()sleep(0.3)continueif hasattr(print_func, '__call__'):print_func('正在确认订单……')# print('正在确认订单……')sleep(1)self.driver.find_by_id('qr_submit_id').click()if hasattr(print_func, '__call__'):print_func('预订成功,请及时前往支付……')# print('预订成功,请及时前往支付……')# 发送通知信息self.send_mail(self.receiver_email, '恭喜您,抢到票了,请及时前往12306支付订单!')# self.send_sms(self.receiver_mobile, '您的验证码是:8888。请不要把验证码泄露给其他人。')else:if hasattr(print_func, '__call__'):print_func('当前车次异常')# print('当前车次异常')except Exception as error_info:if hasattr(print_func, '__call__'):print_func(error_info)# print(error_info)# 跳转到抢票页面self.driver.visit(self.ticket_url)except Exception as error_info:print(error_info)

其中self.driver是需要引入splinter.browser.Browser,根据源码可以看到支持的浏览器类型基本覆盖了常用的浏览器了。

_DRIVERS = {'chrome': None,'edge': None,'firefox': None,'remote': None,'django': None,'flask': None,'zope.testbrowser': None,
}

我用的是Chrome浏览器,以此为例需要先查看自身浏览器的版本号下载对应版本的驱动。

由于墙的存在下载速度太慢,可以选择国内源:http://npm.taobao.org/mirrors/chromedriver/

 下载后将压缩包里的文件复制到Chrome浏览器安装目录的Chrome/Application目录下。

以上步骤都弄好后可以先在python console尝试一下 ,看是否成功调出Chrome浏览器。

from splinter.browser import Browser
driver = Browser(driver_name='chrome')

 原脚本文件运行后是在黑窗窗上输入个类信息的,我加了个ui界面,输入相对方便些,但是要用于购票的话,还是需要提前上12306网站查看车次信息。因为这里并没有加爬取网页车次信息和座位类型供选择的功能,若有感兴趣的欢迎下载源码修改完善。https://gitee.com/solun/python-pro.git

 当然,如果有需要也可以直接下载我打包好的exe文件直接使用,只是每次购票的时候都需要重复扫码登录。另外车站列表中只有部分城市的火车站,若要添加新的可按如下方法操作。

下载链接

链接:12306购票辅助工具
提取码:4tfj 
--来自百度网盘超级会员V5的分享

车站添加方法

 

 如图所示,在浏览器中打开12306网址,并选择车站名,打开开发者模式,选择“网络”,点击任意一条请求查看cookie内容, 其中_jc_save_fromStation= %u6C88%u9633%2CSYT 代表刚刚选择的出发站沈阳站; _jc_save_toStation= %u4E0A%u6D77%2CSHH 代表目的地上海站; 将加粗部分的编码复制到stations.csv中,按格式编辑即可。


http://chatgpt.dhexx.cn/article/D2ZJsv3y.shtml

相关文章

全网首发:12306抢票算法大曝光?(十张图搞定)

前言 相信大家都有过抢票、刷票的经验,每年年底,这都是一场盛宴。 然而,你有没有想过12306的抢票算法是怎么实现的呢? 没有吧,想过,还是没有头绪? 今天,我们就来曝光让人又爱又恨…

12306自动刷票下单-查票下单

前言 上篇写了12306登录,隔了快一个月了,才准备动手写下单篇,真的要非常感谢博客园的 Asimple朋友,如果不是看到你的留言,我几乎都忘了要写下篇了,这一点在简书上就不好,都没人看/(ㄒoㄒ)/~~&a…

python+selenium实现12306自动登录刷票抢票(自己做黄牛?!)

上一篇写了12306的自动登录破解验证图https://blog.csdn.net/weixin_38283159/article/details/86498159 这篇算是它的后续部分加上了简单的刷票和预订功能,毕竟登录一下没什么实际价值嘛 博主曾被黄牛挣过一百大洋至今还耿耿于怀,不清楚他们到达是如何抢…

转载--12306刷票记

转载自:http://www.360doc.com/content/13/0122/17/453497_261790962.shtml 我也记不清啥时候动了写bot刷票这个念头的。原因很简单,我一直认为作为一个以代码谋生的不合格程序员,只有把生产工具用好,才能增加自己存在的价值。 首…

12306自动刷票下单-查票下单(二)

前言 上篇写了12306登录,隔了快一个月了,才准备动手写下单篇,真的要非常感谢博客园的 Asimple朋友,如果不是看到你的留言,我几乎都忘了要写下篇了,这一点在简书上就不好,都没人看/(ㄒoㄒ)/~~&a…

快过年了,Python实现12306查票以及自动购票....

马上就要过年了,听说还有人买不到票? 不要慌,今天咱们来用Python做一个自动查票抢票的脚本,24小时抢票,谁抢的过你! python实现12306自动抢票查票 准备工作爬虫思路 准备工作 环境 Python 3.8Pycharm 插…

12306智能刷票,订票

乐在分享 python版本支持 2.7.10 - 2.7.15 依赖库 依赖若快 若快注册地址:http://www.ruokuai.com/client/index?6726 推荐用若快,打码兔平台已经关闭项目依赖包 requirements.txt安装方法 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r…

12306自动刷票下单-下单

12306自动刷票下单-登录 12306自动刷票下单-查票预定 下单 进入下单界面了 https://kyfw.12306.cn/otn/confirmPassenger/initDc 还有一个请求https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs 仔细看一下返回值,是我们常用联系人的信息&…

12306自动刷票下单-下单(三)

12306自动刷票下单-登录篇(一)12306自动刷票下单-查票预定(二) 下单 进入下单界面了 https://kyfw.12306.cn/otn/confirmPassenger/initDc 还有一个请求https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs 仔细看一下…

新手写的一个12306刷票工具

本来是去年打算写的一个12306的刷票工具,但是一直拖着没完成。过完年才搞好。其实也不算写好,只是感觉都过完年了这个东西都没多大意义,在说各大网站上都有这个功能。但就当记录一下吧。 刚开始写的时候困扰我的其实不是买票的流程&#xff0…

【使用教程】面向回家编程-12306智能刷票,订票

代码链接:https://github.com/testerSunshine/12306 实名感谢:testerSunshine 春运一票难求,很多朋友都听说了GitHub上的12306抢票神器,但苦于没有计算机编程基础或在使用过程中遇到暂时无法解决的问题导致抢票失败。特撰写本博…

12306自动刷票下单-登录篇(一)

12306网站推出图片验证码以后,对于抢票软件就提出了更高的要求,本篇并不涉及自动识别验证码登录(主要是博主能力所限),提供一个途径-打码平台,这个几乎是可以破解所有验证码了,本篇主要是分享一…

12306刷票脚本

我也在刷票,不过发现12306还是发生了一些变化,在使用过程中,发现会自动退出登录。所以对脚本做了一些改动。顺便加了一些新的功能。具体如下: 防自动退出 添加刷到票后发起桌面通知 勾选某些类型的车 选择发站站点 …

c#模拟网页实现12306登陆、自动刷票、自动抢票完全篇

这一篇文章,我将从头到尾教大家使用c#模拟网页面登陆12306网站,自动刷票,选择订票人,到最后一步提交订单。研究过HTTP协议的童鞋们都知道,我们在访问网站时,是有两种方式的,POST和GET方式&#…

你距离家只差一个刷票脚本而已——12306刷票脚本升级版

马上就要回家了,票还没有。你是否用到了我去年发布的刷票脚本呢。传送门~ 我也在刷票,不过发现12306还是发生了一些变化,在使用过程中,发现会自动退出登录。所以对脚本做了一些改动。顺便加了一些新的功能。具体如下:…

搞技术的要不要学习财务知识

越是大型的集团或者企业,公司里面设立的部门就越多,也越细化,各部门之间既相互独立管理,又是相互的辅助支持,所以在工作中经常遇到这样的一个问题,就是做技术的要不要学习财务知识。这个问题其实就是把技术…

财务管理的一般常识

2019独角兽企业重金招聘Python工程师标准>>> 财务总监助理在协助财务总监做好企业理财规划与管理的时候需要首先了解以下的有关知识: —、财务和企业财务管理的概念 所谓“财务”,通俗地讲就是有关“钱财”的事务。从事一切事业都离不开钱财&…

财政系统基本知识

文章目录 一、基础数据1、单位管理修改2、部门信息 二、资产账1、卡片登记(新增资产)2、新增资产入账,也可批量入账3、卡片变动1)普通信息变动 >>>普通信息确认2)资产价值变动3)资产大类变动4&…

身为企业管理者,必须了解的财务知识

财务管理工作是企业管理工作中的核心内容,也是企业管理工作中的难点内容,对于集团企业来讲更是任务艰巨而又问题频出。然而,信息时代的来临为解决和完善企业财务管理问题提供了新思路,就集团企业而言,财务管理信息化基…

业务:财务会计业务知识

一、引言 会计是以货币为主要计量单位,对企业、事业、机关、团体及其他经济组织的经济活动进行记录、计算、控制、分析、报告,以提供财务和管理信息的工作。会计的职能主要是反映和控制经济活动过程,保证会计信息的合法、真实、准确和完整&a…