用Python实现12306自动抢票,还能发短信邮件通知

在这里插入图片描述
脚本实现及实践

今天用Python写了这个12306抢票脚本,分享出来,与大家共同交流和学习,有不对的地方,请大家多多指正。话不多说,进入正题:(文章后有福利)

这个脚本目前只能刷一趟车的,人数可以是多个,支持选取作为类型等。

实现思路是splinter.browser模拟浏览器登陆和操作,由于12306的验证码不好自动识别,所以,验证码需要用户进行手动识别,并进行登陆操作,之后的事情,就交由脚本来操作就可以了,下面是我测试时候的一些截图:

第一步:如下图,首先输入抢票基本信息
在这里插入图片描述
第二步:然后进入登录页,需要手动输入验证码,并点击登陆操作
在这里插入图片描述
第三步:登陆后,自动进入到抢票页面,如下图这样的
在这里插入图片描述
最后:就是坐等刷票结果就好了,如下图这样,就说是刷票成功了,刷到票后,会进行短信和邮件的通知,请记得及时前往12306进行支付,不然就白抢了。
在这里插入图片描述
运行环境

Python运行环境:python3.6

用到的模块:re、splinter、time、sys、httplib2、urllib、smtplib、email

未安装的模块,请使用pip instatll进行安装,例如:pip install splinter

如下代码是这个脚本所有用到的模块引入:
在这里插入图片描述
准备城市名COOKIE

刷票前信息准备,我主要说一下始发站和目的地的cookie值获取,因为输入城市的时候,需要通过cookie值,cookie值可以通过12306官网,然后在F12(相信所有的coder都知道这个吧)的network里面的查询请求cookie中可以看到,在请求的header里面可以找到,_jc_save_fromStation值是出发站的cookie,_jc_save_toStation的值是目的地的cookie,然后加入到代码里的城市的cookie字典city_list里即可,键是城市的首字母,值是cookie值的形式。

模拟登陆操作

抢票,肯定需要先登录,我这里模拟的登录操作,会自动填充12306的账号名和密码,当然,你也可以在打开的浏览器中修改账号和密码,实现的关键代码如下:
在这里插入图片描述
登录之后,就是控制刷票的各种操作处理了,这里,我就不贴代码了,因为代码比较多,别担心,在最后,我会贴出完整的代码的。

短信和邮件通知

当刷票成功后,我会进行短信和邮件的双重通知,当然,这里短信通知的平台,就看你用那个具体来修改代码了,我用的是互亿无线的体验版的免费短信通知接口;发送邮件模块我用的是smtplib,发送邮件服务器用的是163邮箱,如果用163邮箱的话,你还没有设置客户端授权密码,记得先设置客户端授权密码就好了,挺方便的。以下是主要实现代码:
在这里插入图片描述
说了那么多,感觉都是说了好多废话啊,哈哈,不好意思,耽误大家时间来看我瞎扯了,我贴上大家最关心的源码,请接码,大家在尝试运行过程中,有任何问题,可以给我留言或者私信我,我看到都会及时回复大家的:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其实做为一个开发者,有一个学习的氛围跟一个交流圈子是一个特别重要的事情,这里我创建了一个python交流群12546470,不管你是小白还是大牛欢迎入驻,大家一起交流成长。

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. 最后,可以通过邮件或短信等方式通知自己是否到了车
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值