又是一年,马上就要回家过年了,还没有买到票的小伙伴们是否已经像热锅上的蚂蚁了无脑的开始找黄牛了?

俗话说的好,求人不如求自己,抢票这玩意,其实我觉得我也可以~

来来来,直接入正题吧!

这里有两种方案,一种是基于Selenium2的自动化框架控制浏览器实现,另一种方案则是基于Python自身的爬虫package如request,urllib等来实现,本文实现第一种方案,第二种方案也在摸索中。

实现过程

一、新版12306官网主要页面网址

https://kyfw.12306.cn/otn/resources/login.html

https://kyfw.12306.cn/otn/view/index.html

https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc

二、浏览器驱动信息

这里使用的是chrome浏览器

在此处下载

https://sites.google.com/a/chromium.org/chromedriver/downloads

三、初始化必要信息

买票必要信息,比如乘车人,来往车站,车次类型等等

# 乘客姓名

passengers_input = 'xxx'

passengers = passengers_input.split(",")

#乘车日期,格式为2019-01-10

from_time = '2019-01-31'

# 城市cookie字典

city_list = {

'sz':'%u6DF1%u5733%2CSZQ', #深圳

'zz':'%u90D1%u5DDE%2CZZF', #郑州

'gz':'%u5E7F%u5DDE%2CGZQ', #广州

}

# 出发站

from_station = '%u5E7F%u5DDE%2CGZQ'

# 终点站

to_station = '%u90D1%u5DDE%2CZZF'

# 车次编号

numbers = ['Z90','Z190','Z14','Z168','Z98','T124','T370']

# 座位类型

seat_type = '硬卧'

#通知邮件

receiver_email = 'xxxxxxxxx@163.com'

注意:城市字典是将城市简写和城市代码之间联系起来。如果没有你想要到城市,可以在打开12306的查票页面,然后打开浏览器的开发者模式,输入对应的城市,然后查看请求信息。

四、登录功能实现

登录我们需要手动登录,扫码或者输入账号都可以。登录后记录session,供后面抢票使用

def do_login(self):

"""登录功能实现,手动识别验证码进行登录"""

self.driver.visit(self.login_url)

sleep(1)

# 选择登陆方式登陆

print('请扫码登陆或者账号登陆……')

while True:

if self.driver.url != self.init_my_url:

sleep(1)

else:

break

五、抢票功能实现

核心功能实现,通过扫描关键字来确认是否有余票,然后实现点击页面,进而走向下一步。

current_tr = self.driver.find_by_xpath('//tr[@datatran="' + number + '"]/preceding-sibling::tr[1]')

if current_tr:

if current_tr.find_by_tag('td')[self.seat_type_index].text == '--':

print('无此座位类型出售,已结束当前刷票,请重新开启!')

sys.exit(1)

else:

# 有票,尝试预订

print('刷到票了(余票数:' + 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 = 1

for p in self.passengers:

# 选择用户

print('开始选择用户……')

self.driver.find_by_text(p).last.click()

# 选择座位类型

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 += 1

sleep(0.2)

if p[-1] == ')':

self.driver.find_by_id('dialog_xsertcj_ok').click()

print('正在提交订单……')

self.driver.find_by_id('submitOrder_id').click()

sleep(2)

print('正在确认订单……')

self.driver.find_by_id('qr_submit_id').click()

六、抢票成功后邮件通知自己

一个很简单的功能,不过却是必要的,避免自己错过!

def send_mail(self, receiver_address, content):

"""发送邮件通知"""

# 连接邮箱服务器信息

host = 'xxxx.163.com'

port = 25

sender = 'xxxxxx@163.com' # 你的发件邮箱号码

pwd = 'xxxxx' # 第三方授权登录吗,不是登录密码!!

# 发件信息

receiver = receiver_address

body = '

温馨提醒:

' + content + '

'

msg = MIMEText(body, 'html', _charset="utf-8")

msg['subject'] = '抢票成功通知!'

msg['from'] = sender

msg['to'] = receiver

s = smtplib.SMTP(host, port)

# 开始登陆邮箱,并发送邮件

s.login(sender, pwd)

s.sendmail(sender, receiver, msg.as_string())

过程演示

执行代码

登录12306网站

抢票成功

等待支付

邮件通知

总结:

总的来说是成功的,但还不是完全自动化的。不过相比手动抢票还是快很多的。其实网上这种代码很多,只不过因为12306网站的更新大多数不能用了,我也是在前辈们的基础上修改完成的。想要最新源码的同学可以关注的我公众号,回复抢票源码!

python刷票 黑科技_抢火车票这个事吧,其实我也能做!(python黑科技)相关推荐

  1. python代码_抢球鞋?预测股市走势?淘宝秒杀?Python表示要啥有啥 - 街角的守望。...

    球鞋那么难抢,有没有抢限量版球鞋的神器? 每当限量版球鞋开售的时候,几十万人一拥而入,能抽中的却是少数. 朋友圈刷到别人中标的消息,心里又羡慕又有点酸......这种时候只能去找黄牛了. 黄牛党都是靠 ...

  2. python球鞋怎么样_抢球鞋?预测股市走势?淘宝秒杀?Python表示要啥有啥

    球鞋那么难抢,有没有抢限量版球鞋的神器? 每当限量版球鞋开售的时候,几十万人一拥而入,能抽中的却是少数. 朋友圈刷到别人中标的消息,心里又羡慕又有点酸......这种时候只能去找黄牛了. 黄牛党都是靠 ...

  3. python布尔测试对象_面试题十九期-测试开发面试题之python系列-这个中~

    坚持梦想 就算所有人都不支持你.这条路会很曲折,你也会一度认为是不是自己选错了,但只要坚持,就算最后没有成功,但努力了就不会有遗憾. 测试开发python系列面试题 01 单选题 1.下列哪个语句在P ...

  4. python大家都会吗_一篇告诉你为什么人人都应该学点Python?

    全文主要分为以下四个部分,各位看官可以自行选择阅读,写文的目的是希望大家能在学习了解Python的同时能在日常生活中运用上,若有补充,欢迎在评论区留言.本文默认已经安装好Python 2.7环境,需要 ...

  5. python可以调试吗_调试-有什么好的方法可以使我的Python代码首次运行?

    调试-有什么好的方法可以使我的Python代码首次运行? 我的代码中出现了很多错误. 因此,我希望能够在一开始就将它们最小化,或者在执行代码之前看到尽可能多的错误. 这可能吗,如果可以,我该怎么做? ...

  6. python商城源码_腾讯大佬用了12小时讲完的Python,整整400集,拿走不谢

    Python在近几年越来越受追捧,很多童鞋或者职场小伙伴想要提升技能-学习Python. 这是非常好的事情,但问题在于很多人不知道学Python做什么,所以什么零碎细末.艰难晦 涩.长篇大论的都去看, ...

  7. python vb 哪个好学_最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几...

    原标题:最难学的七大编程语言,VB 第一,Python垫底,看你学的排第几 在很多人眼里程序员的标配就是黑框眼镜+格子衫+双肩包+牛仔裤+运动鞋,拥有了这些可能就被判定为一个程序员. 而如何判定一个程 ...

  8. python商城源码_腾讯大佬用了10小时讲完的Python,整整400集,拿走不谢

    Python在这几年里面越来越受人欢迎,很多的入门小白和职场小伙伴都想要提升自己的学习技能来学习Python~这是一件非常好的事情,但是有很多人不知道应该如何学习Python,学习Python需要做些 ...

  9. 运维学python用不上_作为运维你还在想要不要学Python,看完这篇文章再说!

    原标题:作为运维你还在想要不要学Python,看完这篇文章再说! 本文由马哥教育Python自动化实战班5期学员推荐,转载自简书,作者为Li.Yingjie,内容略经小编改编和加工,观点跟作者无关,最 ...

最新文章

  1. 机器人雅可比矩阵的求法_构造法
  2. PL/SQL 数据库连接工具的下载、安装与使用实例演示
  3. poj2718 Smallest Difference
  4. 稀疏模型与结构性稀疏模型
  5. 争对让望对思野葛对山栀注解_笠翁对韵.支_李召洋、于婷、杨盼兮、于婷_高音质在线试听_笠翁对韵.支歌词|歌曲下载_酷狗音乐...
  6. python爬虫多线程是什么意思_python爬虫中多线程的使用详解
  7. MFC 定时器用法 SetTimer、KillTimer
  8. 全程图解:Centos 5.2 下 ORACLE10G 安装配置
  9. spring boot jar包_「Spring Boot 新特性」 jar 大小自动瘦身
  10. three.js glb 多个_直降7.1万元 奔驰GLB开始“大甩卖”
  11. paip.图片搜索工具总结
  12. 计算机电路基础电压比较器电路图,计算机电路基础期末复习.doc
  13. 深入理解Nginx:模块开发与架构解析
  14. 实体链指(2)EL:Disambiguation-Only
  15. Roxe:大涨时毅然销毁99% ROC 专注解决跨境汇款难题
  16. VR套装的一种低成本实现方式
  17. UIQ 3 概念认识
  18. 火山引擎、阿里云、腾讯云联合发布“超低延时“直播技术标准
  19. 安装引导黑屏_电脑开机黑屏,提示NTLDR is missing怎么解决?
  20. bundle包是什么意思_如何创建和使用Bundle资源包

热门文章

  1. vue-cli3脚手架项目:HeaderTop(公共头部)组件(使用v-slot、pros实现)
  2. 个人编写串口助手程序示例
  3. 根据真实数据计算一段时间内价格走势,echarts折线图数据补全方法。
  4. java并发系列 的素材_素材网站总汇
  5. DevOps-CI/CD流水线设计
  6. 设计模式(工厂和代理)
  7. 一文读懂元宇宙生态Plato Farm,治理通证PLATO的价值
  8. 一文读懂腾讯云MaaS:开启中小企业数字化的万能钥匙
  9. 互联网公司招聘--华为--校园招聘程序员--2017年笔试题
  10. docker安装宝塔