文 | 某某白米饭

来源:Python 技术「ID: pythonall」

大家好,这一篇是 12306 的自动预订车票篇,前篇已经撸完了 12306 的自动登录。小编希望小伙伴们能多给几个赞,以示鼓励。

查询车票

首先 selenium 打开到 https://kyfw.12306.cn/otn/leftTicket/init 购票查询车票页面。这个页面只有 2 个需要要模拟人工的操作:

  1. 填写 出发地、目的地、出发日,点击查询按钮

12306 的出发地、目的地、出发日的文本框用下面的代码自动写入似乎是没什么作用的。

ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
self.driver.get(ticket_url)
self.wait.until(self.findElement(By.ID, 'fromStationText')).send_keys('上海')
self.wait.until(self.findElement(By.ID, 'toStationText')).send_keys('常州')
self.wait.until(self.findElement(By.ID, 'train_date')).send_keys('2021-07-23')
self.wait.until(EC.visibility_of_element_located((By.LINK_TEXT, '查询'))).click()

只能另辟蹊径了。在页面将目的地、出发地、出发日 填入,点击查询查询,惊喜的发现在 F12 控制面板下 cookie 中存放了日期值。

可是没有看到出发地和目的地的汉字,猜测可能这些汉字被编码过了,在编码网站解析一番。

于是就可以照猫画虎将编码过的目的地、出发地、出发日设置到 cookie 中,并刷新页面。

self.driver.add_cookie({'name': '_jc_save_fromStation', 'value': '%u5E38%u5DDE%2CCZH'}) #常州
self.driver.add_cookie({'name': '_jc_save_toStation', 'value': '%u4E0A%u6D77%2CSHH'}) #上海
self.driver.add_cookie({'name': '_jc_save_fromDate', 'value': '2021-08-02'})
self.driver.refresh()
# 一个温馨提示弹窗
self.wait.until(self.findElement(By.LINK_TEXT, '确认')).click()self.wait.until(self.findElement(By.LINK_TEXT, '查询')).click()

这时就将车票刷新出来了。

  1. 找到车次所在的行,点击预定

这里用 XPath 语法找到车次所在的预订单元格,用判断浏览器地址是否改变的方式判断是否进入到预订页面。

# 是否进入预订页面
while self.driver.current_url == ticket_url:self.wait.until(self.findElement(By.LINK_TEXT, '查询')).click()time.sleep(2)try:a = self.driver.find_element_by_xpath("//tr[@datatran='K1511']/preceding-sibling::tr[1]/child::node()[last()]/a")if a.text == '预订':breakexcept Exception as e:print("没有车次")a.click()

预订

在预订页面就简单了,只需要选择乘车人和票种、席别。将这些信息定义在数组中,有几个乘车人就定义几个数组元素。

passengers = ['xxx']
ticketType = ['成人票']
seatType = ['硬座(¥28.5)']
for index, p in enumerate(passengers, 1):self.driver.find_element_by_xpath("//label[text()='"+p+"']/preceding-sibling::input[1]").click()selectTicketType = Select(self.driver.find_element_by_id('ticketType_' + str(index)))selectTicketType.select_by_visible_text(ticketType[index - 1])selectSeatType = Select(self.driver.find_element_by_id('seatType_' + str(index)))selectSeatType.select_by_visible_text(seatType[index - 1])self.driver.find_element_by_id('submitOrder_id').click()self.driver.find_element_by_id('qr_submit_id').click()

到这里就可以使用手机支付火车票了。

总结

两篇文章写完了 12306 的抢票软件,大伙们只需要按照自己的需稍微的修改一下脚本,就可以在逢年过节抢抢抢了。

PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!

老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

代码获取方式】

识别文末二维码,回复:210726

自动抢票之 12306 抢票篇相关推荐

  1. php获取12306余票,获取12306余票信息

    不多说,直接上代码: 请求URL: https://kyfw.12306.cn/otn/leftTicket/queryT? 或者: https://kyfw.12306.cn/otn/leftTic ...

  2. 快过年了,该买回家的票了,自动抢票之 12306 抢票篇

    大家好,这一篇是 12306 的自动预订车票篇, 查询车票 首先 selenium 打开到 https://kyfw.12306.cn/otn/leftTicket/init 购票查询车票页面.这个页 ...

  3. 12306 抢票,极限并发带来的思考

    点击上方"蓝色字体",选择"置顶或者星标" 你关注的就是我关心的! 来源:https://juejin.im/post/5d84e21f6fb9a06ac824 ...

  4. java订单号 github_GitHub - github2zhang/J12306: 12306抢票程序JAVA版

    J12306抢票助手 12306抢票程序JAVA版,自动登录-验证-查票-购票/自动候补.只需简单的配置即可运行进行快捷抢票. 使用说明 引入jar依赖 手动添加项目lib文件夹中的依赖包 配置文件c ...

  5. 春运抢票:“12306”的架构到底有多牛逼?

    作者:绘你一世倾城 来源:https://juejin.im/post/5d84e21f6fb9a06ac8248149 " 每到节假日期间,一二线城市返乡.外出游玩的人们几乎都面临着一个问 ...

  6. 【python自动化测试】京东|淘宝|秒杀12306抢票程序揭秘!一起薅羊毛吧【含源码】

    相信老铁们应该也看过很多这样的视频或者帖子:python自动秒杀的程序,京东,淘宝,大麦网抢票,秒杀抢购抢茅台,12306抢票,还有python薅羊毛的,感觉好像需求挺大的,很多人感兴趣.我也看了一些 ...

  7. 12306订票助手插件拖垮GitHub事件原因始末

    事件起因 \ 春节临近,12306订票难的问题再一次被引向风口浪尖.而这一次,各家浏览器厂商不失时机的推出了"春节专版".这些林林总总浏览器的共同特点,是集成了一位网友iFish( ...

  8. 12306订票助手使用攻略 助您顺利回家

    目前最火的火车票自动订票助手--12306订票助手,使用起来很简单,但还有不少网友在操作时不会使用,966266浏览器评测网小编特将不同版浏览器上的12306订票助手使用方法整理下. 12306订票助 ...

  9. 快春运了,做个火车余票查询接口,余票来源12306,图是百度地图

    摘要:做个火车票查询余票接口,数据来源于12306,地图使用百度地图(未完成) 今天本来想查询一下回家的车票,结果坑爹的发现12306网站死活打不开,尼玛真实坑爹,想查询一下余票都怎么难 于是自己决定 ...

  10. 【python教程入门学习】自动抢票之 12306 登录篇

    逢年过节 12306 的票总是要靠抢,前几天小编就在抢周一去上海的票,实在是抢不到呀,就撸了一个自动抢票的脚本. 抢票的思路就是使用 selenium 模拟用户登录 12306 网站购票行为,登录后抓 ...

最新文章

  1. 波特率、比特率、速率、通信速度
  2. “跟风离职后,找不到工作了!”:好多同事离职,这家公司还值不值得待?...
  3. 信息化监理是请来的第三者?
  4. 在实际管理中学习管理
  5. mmap直接操作底层,相当于驱动
  6. win2008 server_R2 自动关机 解决
  7. ABAP Text table implementation
  8. 为什么同步的StringBuffer从来都不是一个好主意
  9. 使用AJAX Toolkit创建新闻列表
  10. 中秋节公司发了这个(结尾分享红包)
  11. 七龙珠 |召唤一份单细胞数据库汇总
  12. Web前端是什么?大牛推荐的高效学习路线,减少2倍时间
  13. IE6下Png透明最佳解决方案(推荐) Unit PNG Fix
  14. 代码轻视频系列#001
  15. java执行脚本命令 学习笔记
  16. 小知识--局域网内的文件共享
  17. 睡眠时的局部目标记忆再激活
  18. Scheme 语言概要(上)
  19. 敏捷项目管理实战第一天 敏捷开发SCURM的前世今生
  20. Win10系统将“用户”文件夹下用户名文件夹修改自定义名称

热门文章

  1. django form关于clean及cleaned_data的说明 以及4种初始化
  2. U3D Pun2 官方文档学习和翻译
  3. PDF修改文字的步骤
  4. DVD-R、DVD+R以及DVD-RW和DVD+RW的功能区别
  5. Java反射基础指南
  6. 立创EDA能代替传统的PCB设计软件么?比如AD、protel等?可以
  7. acrobat.exe无法找到入口无法定位程序输入点,无法识别编辑图片上文字
  8. UI设计评审度量评价指导
  9. APP赚钱盈利的8大方法
  10. 云计算与虚拟化有什么区别?