Python3.x:抢票
Python3.x:抢票
一个妹子叫我帮她买动车票,结果竟然没买到票;好吧,不好意思说买不到票,写个抢票程序来完成吧;
1,Chromediver安装:
因为需要chrome支持页面测试,所以需要安装chromedriver。安装过程很简单(实际上不需要安装),注意下版本,有些低版本是不支持高版本的chrome的。镜像链接:http://npm.taobao.org/mirrors/chromedriver。直接把chromedriver.exe扔在在C/windows/system32/文件夹下的,这样就不需要配置环境变量了。
注意:chromedriver要跟chrome匹配;
2,Splinter模块安装:
Splinter是一个自动化测试网络应用的Python库。有了Splinter,就可以将打开浏览器、输入URL、填写表单、点击按钮等全部操作自动化。
通过pip install splinter来安装。
3,自动抢票,就是把每个操作步骤用代码实现;代码如下:
#python3.x from splinter.browser import Browser
from time import sleep
# traceback模块被用来跟踪异常返回信息
import traceback
# 设定用户名、密码
username = u"用户名"
passwd = u"密码"
# 起始站点和乘车时间的cookies值要去找;
# 方法:先登录一下12306,输入地点日期什么的查询一下,然后在chrome浏览器中按F12,出现如下页面,在Application选项里找到相应的值。
# 表格中的cookie值:
#_jc_save_fromeStation的值为出发地
#_jc_save_toSatation的值为目的地
#_jc_save_fromDate 出发日期
#_jc_save_toDate返程日期
# 实例中用的是:福州 到 厦门北 2018-01-13
from_station = u"%u798F%u5DDE%2CFZS"
to_station = u"%u53A6%u95E8%u5317%2CXKS"
# 时间格式2018-01-25
from_date = u"2018-01-13"
# 车次,选择第几趟,0则从上之下依次点击
order = 0
# 设定乘客姓名
ticketer = u"乘客姓名"
# 设定网址
ticket_url = "https://kyfw.12306.cn/otn/leftTicket/init"
login_url = "https://kyfw.12306.cn/otn/login/init"
initmy_url = "https://kyfw.12306.cn/otn/index/initMy12306" # 登录网站
def login():
#点击当前页面的"登录"
bwr.find_by_text(u"登录").click()
sleep(3)
#fill填充搜索框的内容,username。name=loginUserDTO.user_name的元素。
bwr.fill("loginUserDTO.user_name", username)
sleep(1)
bwr.fill("userDTO.password", passwd)
sleep(1)
print(u"等待验证码,自行输入...")
#登录手动输入验证码,并登录系统
while True:
#判断当前的url是否已经进入系统
if bwr.url != initmy_url:
sleep(1)
else:
break
# 购票
def getTickt():
global bwr
# 使用splinter打开chrome浏览器
bwr=Browser(driver_name="chrome")
# splinter打开浏览器(返回购票页面)
bwr.visit(ticket_url)
while bwr.is_text_present(u"登录"):
sleep(1)
login()
#判断是否已经进入系统
if bwr.url == initmy_url:
break
try:
print(u"购票页面...")
# splinter打开浏览器(跳回购票页面)
bwr.visit(ticket_url)
# 加载查询信息
bwr.cookies.add({"_jc_save_fromStation": from_station})
bwr.cookies.add({"_jc_save_toStation": to_station})
bwr.cookies.add({"_jc_save_fromDate": from_date})
bwr.reload()
sleep(2)
count=0
# 循环点击预订
if order != 0:
while bwr.url == ticket_url:
bwr.find_by_text(u"查询").click()
count += 1
print(u"循环点击查询... 第 %s 次" % count)
sleep(1)
try:
bwr.find_by_text(u"预订")[order - 1].click()
except:
print(u"还没开始预订")
continue
else:
while bwr.url == ticket_url:
bwr.find_by_text(u"查询").click()
count += 1
print(u"循环点击查询... 第 %s 次" % count)
sleep(1)
try:
for i in bwr.find_by_text(u"预订"):
i.click()
sleep(1)
except:
print(u"还没开始预订")
continue
sleep(1)
# 可以通过修改sleep的参数来调整延时, 但延时不要太低, 防止被12306网站认为是刷票屏蔽掉.
bwr.find_by_text(ticketer)[0].click()
sleep(1)
bwr.find_by_text(u"提交订单").click()
sleep(1)
#bwr.find_by_id(u"qr_submit_id").click()
print(u"成功抢到一张宝贵的票")
except Exception as e:
print(traceback.print_exc()) if __name__ == "__main__":
getTickt()
作者:整合侠
链接:http://www.cnblogs.com/lizm166/p/8191305.html
来源:博客园
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Python3.x:抢票的更多相关文章
- python3.7之12306抢票脚本实现
悲催的12306,彻底沦为各路抢票软件的服务提供方.元旦伊始,纯粹12306官网及APP抢票,愈一周的时间,仅到手一张凌晨3:55回家的站票.为远离脑残,无奈选择抢票软件,预购年后返沪车票.BTW,研 ...
- 简单的Python 火车抢票程序
当你想查询一下火车票信息的时候,你还在上12306官网吗?或是打开你手机里的APP?下面让我们来用Python写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你想要的火车票信息!如果你刚 ...
- 春运到了,带你用python来抢票回家!
不知不觉,一年一度的春运抢票大幕已经拉开,想快速抢到回家的车票吗?作为程序员,这些技术手段,你一定要知道. 为了让大家更快捷更便利的抢火车票,各种各样的抢票软件应需而生,这类软件大部分都是付费抢票的机 ...
- 实测两款 GitHub 开源抢票插件,所有坑都帮你踩过了
如果你对自己手速和市面上的各种 “加速包” 都没什么信心的话,不妨试试用程序员的手段抢票? 况且,[12306 官方宣布屏蔽了一大批付费抢票软件],这也意味着你即使给这些软件付了会员费,也依旧抢不到票 ...
- python写12306抢票
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 利用splinter写的一个手动过验证及自动抢票的例子, 大家可以自己扩展或者弄错窗体.web端. ...
- 马后炮之12306抢票工具(四)--抢票Demo,2014年1月9日终结版
时隔一年多,终于朋友的忽悠下吧抢票Demo的最后一步完善了,与2014年1月9日成功生成车票. Demo仅经过自己测试,并未在高峰期进行测试,代码质量很差,因为赶工,套用去年模板并未使用设计模式. 代 ...
- [Head First设计模式]抢票中的设计模式——代理模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- 第一章-第六题(帮人抢票,帮人选课这些软件是否合法 你怎么看?)--By梁旭晖
我觉得这些软件是合法的,符合道德规范的. 计算机当初设计的初衷就是简化甚至替代人类的工作.而软件作为计算机硬件的驱动着,其设计就是体现这些原则. 现在互联网上的订票,选课类型的网站还是有很多的,比如: ...
- 如何在Chrome39添加360抢票王插件
前言: 版本:Chrome 39.0.2171.95 m CRX文件来源:ext.se.360.cn 本文地址:http://www.cnblogs.com/go2bed/p/4206714.html ...
随机推荐
- ORA-12899: value too large for column
ORA-12899: value too large for column "SOAU"."SJQY_QTSBSPEC"."PROPERTY_6&qu ...
- 160411、实时监控mysql数据库变化
对于二次开发来说,很大一部分就找找文件和找数据库的变化情况 对于数据库变化.还没有发现比较好用的监控数据库变化监控软件. 今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1.打开数 ...
- CodeForces 24D Broken robot (概率DP)
D. Broken robot time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- Servlet------>jsp自定义标签5(标签体内容改为大写)
5.把标签体内容改为大写(tld中的配置我就省略了,详细请看jsp自定义标签1) import java.io.IOException; import javax.servlet.jsp.JspExc ...
- netty/example/src/main/java/io/netty/example/http/snoop/
netty/example/src/main/java/io/netty/example/http/snoop at 4.1 · netty/netty https://github.com/nett ...
- WeQuant交易策略—EMV
EMV指标策略 简介 EMV(Ease of Movement Value, 简易波动指标),它是由RichardW.ArmJr.根据等量图和压缩图的原理设计而成, 目的是将价格与成交量的变化结合成一 ...
- Java 之NIO
1. NIO 简介 Java NIO(New IO)是从1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API; NIO 与原来的IO有同样的作用和目的,但是使用的方式完全不同 ...
- linux知识体系
0. Linux简介与厂商版本 1. Linux开机启动 2. Linux文件管理 3. Linux的架构 4. Linux命令行与命令 5. Linux文件管理相关命令 6. Linux文本流 7. ...
- window下的开发环境:常用软件
window下的开发环境:常用软件 Visio 2010 - 产品设计 xmind -产品设计 Axure -产品设计 Edraw max 7.3(破解版) -产品设计 ...
- JavaScript工具库 lodash 中文文档 英文文档
https://lodash.com/docs/ 英文版 http://lodashjs.com/docs/ 中文版 http://www.css88.com/doc/lodash/ 中文版 ...