使用Python进行12306抢票

27 篇文章 1 订阅
25 篇文章 0 订阅

最近朋友圈各种加速包抢票,偶然看到可以使用python也可以进行抢票,索性测试下。

不说废话,不搞那么多前戏了,直接贴上图看一下效果:
在这里插入图片描述
这是一个开源项目,具体使用方法在github上有着较详细的介绍。下面只对这个开源项目按照自己的理解做个简单介绍,自身理解和实际有所出入的地方,可以提出来一起去修正 学习。

贴心的作者已经将流程图画了出来,按照图示,这也就是个模拟正常人买票的流程。
在这里插入图片描述

1、识别验证码

大家都有所体会12306那种神级验证码,即使是聪明如你也不定每次都能把验证码找对找全。然而经过训练后的模型却是可以的,不得不感叹科技强大。当然该程序中并没有涉及到这一识别验证码的核心技术,它只是将这一工作丢给第三方若快平台去做,然后自身利用结果即可。那么若快是如何识别这种神级验证码呢?通过机器学习 训练所需要的模型?笔者在这方面所了解的较少,不能给过多解释。但是这确实是个值得研究的方向。

2、消息推送

抢票成功后,该程序会将相关信息以微信或邮箱形式通知我们,这也是调用的第三方技术。这一块比起识别验证码就容易多了。

注:给我们推送相关消息,需要用户去提供账户和密码,这是个冒险的尝试,避免不了信息泄露的可能。

3、相关模块

此程序配置 运行起来很比较简单。根据requirement.txt文件下载所需模块,在config/ticket_config.yaml文件中配置自己的信息。

  • beautifulsoup44.5.3 bs40.0.1 是python解析html非常好用的第三方库!

  • PyYAML==3.12 YAML 是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。YAML 类似于 XML,但是语法比 XML 简单得多。PyYAML 是 YAML 的 Python 实现,可以用于参数化 Pytho n对象,用来当做配置文件。

  • six==1.10.0 众所周知 Python 2 和 Python 3 版本的分裂给 Python 开发者们带来了很大的烦恼,为了使代码同时兼容两个版本,往往要增加大量的代码。 于是 Six 出现了。正如它的介绍所说,它是一个专门用来兼容 Python 2 和 Python 3 的库。它解决了诸如 urllib 的部分方法不兼容, str 和 bytes 类型不兼容等“知名”问题。

  • requests==2.18.4 网络请求用到了经典的 requests 库

  • Pillow==5.0.0 Pillow 是很经典的 Python 图像处理库

  • wrapcache==1.0.8 是一个可以缓存方法输出的装饰器,即简单的缓存方法的输出值。缓存数据的键值Key完全依赖于方法和传入方法的参数,这部分完全透明,使用起来非常方便。同时还提供部分API方法来通过代码获取缓存、删除缓存,支持Python2.6 ~ Python3.5。

  • ntplib==0.3.3 通过ntplib在windows上同步时间

让改程序成功跑起来

操作步骤:
在这里插入图片描述
最后在捋一遍。1)下载所需库 2)对个人信息进行配置 3)运行 run.py

贴出原项目地址:

https://github.com/testerSunshine/12306

https://github.com/pjialin/py12306/

考虑到一些读者对github不熟悉,我将所有的原项目放在个人微信号后台。回复[12306]可获取。

欢迎关注我的公众号,从一名不羁的码农开始
在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python爬虫可以用于12306抢票,具体步骤如下: 1. 首先,需要安装selenium和chromedriver,selenium是一个自动化测试工具,chromedriver是一个控制Chrome浏览器的驱动程序。 ```python !pip install selenium ``` 2. 导入selenium和time模块,设置浏览器驱动路径和乘车日期等信息。 ```python from selenium import webdriver import time # 设置浏览器驱动路径 driver_path = 'chromedriver.exe' # 设置乘车日期 date = '2022-01-01' ``` 3. 打开Chrome浏览器,并访问12306官网。 ```python # 打开Chrome浏览器 driver = webdriver.Chrome(executable_path=driver_path) # 访问12306官网 driver.get('https://www.12306.cn/index/') ``` 4. 登录12306账号,输入用户名和密码,然后手动输入验证码。 ```python # 等待用户手动输入验证码 time.sleep(30) ``` 5. 在出发地和目的地输入框中输入相应的城市名称,然后选择乘车日期。 ```python # 输入出发地和目的地 driver.find_element_by_id('fromStationText').click() driver.find_element_by_id('fromStationText').clear() driver.find_element_by_id('fromStationText').send_keys('北京') driver.find_element_by_id('toStationText').click() driver.find_element_by_id('toStationText').clear() driver.find_element_by_id('toStationText').send_keys('上海') # 选择乘车日期 js = "document.getElementById('train_date').removeAttribute('readonly')" driver.execute_script(js) driver.find_element_by_id('train_date').clear() driver.find_element_by_id('train_date').send_keys(date) ``` 6. 点击查询按钮,等待页面加载完成。 ```python # 点击查询按钮 driver.find_element_by_id('search_one').click() # 等待页面加载完成 time.sleep(10) ``` 7. 选择车次和座位类型,然后点击预订按钮。 ```python # 选择车次和座位类型 driver.find_element_by_xpath('//tbody/tr[1]/td[13]/a').click() time.sleep(2) driver.find_element_by_xpath('//ul[@id="normal_passenger_id"]/li[1]/label') driver.find_element_by_id('submitOrder_id').click() ``` 8. 点击确认按钮,等待页面加载完成。 ```python # 点击确认按钮 driver.find_element_by_id('qr_submit_id').click() # 等待页面加载完成 time.sleep(10) ``` 9. 最后,可以通过邮件或短信等方式通知自己是否抢到了车票。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值