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:抢票的更多相关文章

  1. python3.7之12306抢票脚本实现

    悲催的12306,彻底沦为各路抢票软件的服务提供方.元旦伊始,纯粹12306官网及APP抢票,愈一周的时间,仅到手一张凌晨3:55回家的站票.为远离脑残,无奈选择抢票软件,预购年后返沪车票.BTW,研 ...

  2. 简单的Python 火车抢票程序

    当你想查询一下火车票信息的时候,你还在上12306官网吗?或是打开你手机里的APP?下面让我们来用Python写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你想要的火车票信息!如果你刚 ...

  3. 春运到了,带你用python来抢票回家!

    不知不觉,一年一度的春运抢票大幕已经拉开,想快速抢到回家的车票吗?作为程序员,这些技术手段,你一定要知道. 为了让大家更快捷更便利的抢火车票,各种各样的抢票软件应需而生,这类软件大部分都是付费抢票的机 ...

  4. 实测两款 GitHub 开源抢票插件,所有坑都帮你踩过了

    如果你对自己手速和市面上的各种 “加速包” 都没什么信心的话,不妨试试用程序员的手段抢票? 况且,[12306 官方宣布屏蔽了一大批付费抢票软件],这也意味着你即使给这些软件付了会员费,也依旧抢不到票 ...

  5. python写12306抢票

    #!/usr/bin/env python # -*- coding: utf-8 -*- ''' 利用splinter写的一个手动过验证及自动抢票的例子, 大家可以自己扩展或者弄错窗体.web端. ...

  6. 马后炮之12306抢票工具(四)--抢票Demo,2014年1月9日终结版

    时隔一年多,终于朋友的忽悠下吧抢票Demo的最后一步完善了,与2014年1月9日成功生成车票. Demo仅经过自己测试,并未在高峰期进行测试,代码质量很差,因为赶工,套用去年模板并未使用设计模式. 代 ...

  7. [Head First设计模式]抢票中的设计模式——代理模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  8. 第一章-第六题(帮人抢票,帮人选课这些软件是否合法 你怎么看?)--By梁旭晖

    我觉得这些软件是合法的,符合道德规范的. 计算机当初设计的初衷就是简化甚至替代人类的工作.而软件作为计算机硬件的驱动着,其设计就是体现这些原则. 现在互联网上的订票,选课类型的网站还是有很多的,比如: ...

  9. 如何在Chrome39添加360抢票王插件

    前言: 版本:Chrome 39.0.2171.95 m CRX文件来源:ext.se.360.cn 本文地址:http://www.cnblogs.com/go2bed/p/4206714.html ...

随机推荐

  1. git--简单操作

    Git简介 一.      安装 下载地址: https://git-scm.com/downloads: https://pan.baidu.com/s/1kU5OCOB#list/path=%2F ...

  2. 在ubuntu上部署Kubernetes管理docker集群示例, vxlan,gre

    http://www.chenshake.com/openstack-folsom-guide-for-ubuntu-12-04/ http://www.cnblogs.com/sammyliu/p/ ...

  3. Python 进程(process)

    1. 进程 1.1 进程的创建 fork 正在运行着的代码,就称为进程 # 示例: import os # 注意: fork 函数,只在 Unix/Linux/Mac 上运行, windows 不可以 ...

  4. LeetCode_Search Insert Position

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  5. alexnet,VGG,googlenet,resnet

    非常好的一篇:https://my.oschina.net/u/876354/blog/1637819 alexnet和VGG没什么特别的,VGG深一些. Deep learning 实际上是一种 f ...

  6. leetcode 旋转单链表

    Given a linked list, rotate the list to the right by k places, where k is non-negative. Example 1: I ...

  7. mysql监控优化(一)连接数和缓存

    一.mysql的连接数 MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,连接数少的话,在大并发下连接数会不够用,会有很多线程在等待其他连接释放 ...

  8. PLSQLDeveloper安装与配置

    1.前提:首先要有oracle数据库或者有oracle服务器,才可以实现使用PLSQL Developer 工具连接到oracle数据库进行开发 2.下载PLSQLDeveloper并解压 3.配置环 ...

  9. tp5中nginx配置

    首先tp5的访问目录指向到webroot/public文件夹中. thinkphp的url访问:http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参 ...

  10. PAT 1096 Consecutive Factors[难]

    1096 Consecutive Factors (20 分) Among all the factors of a positive integer N, there may exist sever ...