2020临近尾声,购买车票回家也逐渐成为人们所关注的事情。所以我心中也就萌生了用程序来自动购票的想法,虽然之前看过一些人关于抢票的程序,本想直接用现成代码来尝试,但奈何12306网站有了许多改动,所以就自己尝试写一个购票程序,也正好对selenium进行回顾。

  其实模拟购票的思路也非常简单,无非就是像我们平常买票一样,进入网站,登录,选中自己出发时间和地点以及目的地,然后预定付款,现在将这种思路转换成代码实现即可。所以这里主要针对本人代码中的部分内容进行解析,先给出网址:https://kyfw.12306.cn/otn/resources/login.html
,废话不多说,上代码:

from time import sleep
from selenium import webdriverdef login():my_user = '我的用户名'my_passwords = '我的密码'script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'bro.execute_script(script)sleep(0.5)# 点击一下使用账号密码登录bro.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a').click()bro.find_element_by_id('J-userName').send_keys(my_user)sleep(1)bro.find_element_by_id('J-password').send_keys(my_passwords)print(u"手动验证---")while True:if bro.current_url != url:print("登录成功---")breakdef main():login()start = '%u5357%u660C%2CNCG'#出发点end = '%u5409%u5B89%2CVAG'#到达点time = '2020-12-01'id = '学生'order = 0#order即列车票的顺序,0则为从上至下依次点击,选择有票的列车购买#若是不为0,则按输入的购买sleep(3)# print(bro.current_url)script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'bro.execute_script(script)bro.find_element_by_link_text('确定').click()bro.find_element_by_link_text("车票").click()bro.find_element_by_link_text("单程").click()sleep(3)url = bro.current_urlbro.add_cookie({"name":"_jc_save_fromStation","value":start})bro.add_cookie({"name":"_jc_save_toStation","value":end})bro.add_cookie({"name":"_jc_save_fromDate","value":time})bro.refresh()if id == '学生':bro.find_element_by_id('sf2').click()else:bro.find_element_by_id('sf1').click()sleep(1)if order == 0:while True:if url != bro.current_url:breakprint("正在查询,客官莫急---")bro.find_element_by_id('query_ticket').click()try:sleep(1)for i in  bro.find_elements_by_class_name('btn72'):i.click()sleep(2)except:print("还未预定,请等待---")continueelse:while True:if url != bro.current_url:breakprint("正在查询,客官莫急---")bro.find_element_by_id('query_ticket').click()try:sleep(1)bro.find_elements_by_class_name('btn72')[order-1].click()sleep(2)except:print("还未预定,请等待---")continuesleep(3)print("进入预定---")print("正在选择乘客---")bro.find_elements_by_class_name('check')[2].click()#默认只有自己bro.find_element_by_link_text('确认').click()print("乘客选择完成---")bro.find_element_by_xpath('//*[@id="seatType_1"]//option[@value="1"]').click()print("提交订单---")bro.find_element_by_link_text("提交订单").click()sleep(1)bro.find_element_by_link_text('确认').click()print("订单已提交---")print("请客官前往支付---")if __name__=='__main__':option = webdriver.ChromeOptions()option.add_argument('disable-infobars')bro = webdriver.Chrome(options=option)bro.maximize_window()  # 浏览器全屏显示url = 'https://kyfw.12306.cn/otn/resources/login.html'bro.get('https://kyfw.12306.cn/otn/resources/login.html')main()

  进入12306网站的登录界面,可以看到有扫码登录和帐号登录,我们模拟自然选择帐号登录,我们用代码输入帐号和密码之后,还有两个验证步骤,一个点触验证和滑动验证,本人能力有限,对于验证暂时没有研究,所以这里还是要手动验证的

  这里值得一提的是,在滑动验证的时候,WebDriver被识别反爬虫(Chrome正受到自动化测试软件的控制),所以我在验证的时候不管怎样滑动都不能通过,一直提醒我刷新,后来搜索解决的办法,即加入下面两行代码,具体可以看这篇博客https://blog.csdn.net/weixin_43870646/article/details/105418801

script = 'Object.defineProperty(navigator,"webdriver",{get:() => false,});'
bro.execute_script(script)
start = '%u5357%u660C%2CNCG'#出发点
end = '%u5409%u5B89%2CVAG'#到达点

  这里的出发站和到达站的输入cookies值,这个需要根据自己的情况去查找,这里给出查找步骤。登录之后,我们可以看到如下界面

(我使用的是谷歌浏览器,按F12快捷键可检查元素),然后选择右上方的Network,在左边的界面中输入你所需要查找的出发地和目的地以及出发日,然后点击查询,会出现如下界面

点击红箭头所指向的位置,会出现一系列的信息,在Headers下找到Cookie这一信息

红箭头所指向的即代表它们的Cookies值。

  最后说明代码中一些特殊情况,针对于我自己的帐号设置,每个人的不一定相同,所以代码可自行更改。


对于此处的点击确定,是我登录后会出现如下界面

  而对于代码中最后的那个点击确定,是因为我选择了学生票,会出现提示界面

以及选择乘客那行代码

bro.find_elements_by_class_name('check')[2].click()

因为我的帐号中添加了其他相关人信息,我自己的选项位置在第三处,所以已下标2进行选择。所以这几处地方可根据自己情况改动代码

  当然,这些代码程序只是牢固我们的知识基础,平常尝试可以,真正买票我们最好还是手动操作,更不能用它干些“非法”的勾当(手动滑稽)!

Python-12306模拟自动购票相关推荐

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

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

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

    sleep(1) bro.find_element_by_id('J-password').send_keys(my_passwords) print(u"手动验证---") wh ...

  3. 爬虫日常-12306自动购票程序

    文章目录 前言 页面分析 代码设计 前言 hello兄弟们,最近在钻研新鲜知识,一不留神没想起来更新.今天我们顺着前面几篇文章完整的写出一篇12306的自动购票软件. 首先把我们已经写完的前期步骤代码 ...

  4. 小年到了,回家抢票太难,用Python做个脚本12306自动查票以及自动购票....

    今天就是小年了,听说还有人买不到票?不要慌,今天咱们来用Python做一个自动查票抢票的脚本,24小时抢票,谁抢的过你!源码包已打包文件夹获取方式:点击这里[ Python全套资料] 即可获取. 准备 ...

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

    嗨害大家好鸭!我是小熊猫~ 明天就是2023年啦~ 还有谁像我小熊猫一样没有回家的? 这次康康能不能12306抢票回家!!! Python实现12306查票以及自动购票 [代码来源]: 青灯教育-自游 ...

  6. python+splinter实现12306网站刷票并自动购票流程

    python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...

  7. python批量自动订票_python+splinter实现12306网站刷票并自动购票流程

    python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...

  8. python模拟火车订票系统代码_Python3.6实现12306火车票自动抢票,附源码

    原标题:Python3.6实现12306火车票自动抢票,附源码 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已 ...

  9. Python实现查票以及自动购票....再也不用愁手速不够啦~

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 今天咱们来用Python做一个自动查票抢票的脚本,24小时抢票,谁抢的过你! 准备工作 环境 Python 3.8 Pycharm 插件 谷歌浏览器驱动 ...

最新文章

  1. 技术人生:本周改进计划
  2. 这还是你所认知的Python吗?原来是这么牛!
  3. R语言distRhumb函数计算距离实战(两个地理点之间的Rhumb距离)
  4. yum-utils离线安装包下载地址
  5. php+字符串去掉反斜杠,PHP如何去掉反斜杠?
  6. linux shell之把文本里面的;替换成\n格式输出
  7. react学习(73)--子组件this
  8. 哈希表的大小为何最好是素数
  9. STM32F103使用DAC功能输出正弦波
  10. Leetcode-字符串
  11. 时间序列分析工具箱——tidyquant
  12. 第一个IOS APP总结
  13. 如何查找专栏(知乎专栏汇总)
  14. c#怎样将object转换过程int型
  15. linux启动tomcat后,浏览器访问不到
  16. 基于java的springboot宠物商城系统毕业设计springboot开题报告
  17. Docker Jenkins 连接agent:SSH key presented by the remote host does not match the key saved in the Know
  18. unlink函数 与 remove函数
  19. 手把手教你抄写URP——3——自发光材质
  20. Linux中安装IE和Office等软件(转)

热门文章

  1. 程序员如何赚到人生第一个 100 万
  2. 计算机磁盘丢失怎么办,电脑硬盘空间丢失怎么解决 教你几个步骤轻松搞定
  3. 功能安全学习笔记002-功能安全的定义
  4. MySQL修改root用户密码
  5. 关于如何戒除青春期过度奖励的坏习惯的四点思考
  6. Springer英文文献下载不了的文章,从哪里找,【建议收藏】,英文文献技巧分享
  7. vue实现表计监测界面
  8. python全局代理_让requests不走系统 全局 代理
  9. 基于51单片机的电子万年历的设计
  10. 网络爬虫-模拟手机浏览器抓取数据