大家好,这一篇是 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 的抢票软件,大伙们只需要按照自己的需稍微的修改一下脚本,就可以在逢年过节抢抢抢了。

粉丝福利

快过年了,该买回家的票了,自动抢票之 12306 抢票篇相关推荐

  1. python抢票web端_python+Splinter实现12306抢票功能

    本文实例为大家分享了python实现12306抢票功能的具体代码,供大家参考,具体内容如下 源码记录如下: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # ...

  2. python开发12306抢票_如何利用 Python 实现12306抢票?

    生苦短,我用 python. 作为一种"胶水语言",python 为无数码农带来了便利:同时,越来越多的 python 工程师被标榜为"高薪党":"全 ...

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

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

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

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

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

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

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

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

  7. 12306 抢票 python + selenium + chrome (二) 基础准备的软件和材料

    我使用的 vmware 14 + ubuntu 16  +  PyCharm  开发环境 12306抢票 python+selenium+chrome 实现一 12306抢票 python+selen ...

  8. 快过年了,春运到了,带你用python来抢票回家!

    不知不觉,一年一度的春运抢票大幕已经拉开,想快速抢到回家的车票吗?作为程序员,这些技术手段,你一定要知道. 为了让大家更快捷更便利的抢火车票,各种各样的抢票软件应需而生,这类软件大部分都是付费抢票的机 ...

  9. python12306买票_Python-12306模拟自动购票!快过年了,学起来啊!

    原标题:Python-12306模拟自动购票!快过年了,学起来啊! from time import sleep from selenium import webdriver def login(): ...

  10. 手把手教你用python抢票_又没抢到票?手把手教你用python抢票回家过年…

    原标题:又没抢到票?手把手教你用python抢票回家过年- 最近朋友圈刷屏:我又没抢到票!哭! 憋急,教程在此,有人愿意尝试吗? 先看看如何快速查看剩余火车票? 作者 protream 原文:http ...

最新文章

  1. vue页面自适应屏幕宽高_Vue+Element UI 高度实时自适应
  2. 使用Matlab画心形线
  3. 三星r750美版刷Android,这是才是全面派 三星space monitor详解
  4. GDCM:制作模板的测试程序
  5. 高级 Linux 命令精通指南(2)
  6. 震惊!递推与递归竟然可以这么编!%99的程序员都不知道!
  7. 利用ResultFilter实现asp.net mvc 页面静态化
  8. 非结构化数据和结构化数据提取
  9. 负margin使用注意的一个问题
  10. 人机交互-10-交互设计模型
  11. 爬虫不借助浏览器登录_借助Android音乐播放器和旅行组合踏上道路
  12. Java Swing 开发总结汇总贴
  13. 【天下有春】七日之书
  14. 沈从文《边城》中的“碾坊”与“渡船”、“车路”与“马路”
  15. 马斯克的人生至暗时刻
  16. BZOJ1707:[Usaco2007 Nov]tanning分配防晒霜
  17. Android 获取某个文件夹下的所有文件
  18. 达梦好用的监控工具 -- DEM 及配置流程
  19. linux启动无线网卡命令,linux以命令行下配置连接wlan无线网卡
  20. HTML <head>标签:头部

热门文章

  1. 2007高校BBS上几个睿智的冷笑话
  2. 【原创】赋值法写基础解系中解向量
  3. 当你心情不好的时候,看看这几句话。。。
  4. 达沃时代的VNAS为NAS使用提供一种新可能
  5. 华为手机助手连接不上电脑怎么办
  6. 《游戏引擎架构》试读感想
  7. 感谢米老师,感谢提高班,做个骄傲的自己
  8. Powerbuilder混淆与加密器(powerbuilder防止反编译,pb混淆器,支持5-12) obfuscator for PowerBuilder...
  9. 传奇世界私服务器端制作,传奇世界单机版一键端带服务器附带安装教程。(可局域网)...
  10. Java第二次作业|实验3 运算符、表达式和语句