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. java解析xml字符串(用dom4j)

    package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...

  2. Arduino开发版学习计划--小车的行走

    小车的前进后退,左右转弯 代码如下 void motor(char pin,char pwmpin,char state,int val) { pinMode(pin, OUTPUT); ) { an ...

  3. [Android Tips] 29. 如何判断当前编译的是哪个 Flavor ?

    背景说明 应用需要针对不同的市场集成不同的第三方 SDK ,比如:面向海市场的版本需要集成 google-service apply plugin: 'com.google.gms.google-se ...

  4. Java switch 详解

    switch 语句由一个控制表达式和多个case标签组成. switch 控制表达式支持的类型有byte.short.char.int.enum(Java 5).String(Java 7). swi ...

  5. Code Forces 22B Bargaining Table

    B. Bargaining Table time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. HDU_5536_Chip Factory

    Chip Factory Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)T ...

  7. lightoj1132—Summing up Powers (取膜技巧&&组合数应用)

    题目链接:https://vjudge.net/problem/LightOJ-1132 题目意思:(1K + 2K + 3K + ... + NK) % 232 矩阵快速幂的题目一般都很短,这道题也 ...

  8. EntityFramework.DynamicFilters 实现软删除和租户过滤

    EntityFramework.DynamicFilters 实现软删除和租户过滤

  9. __destruct()析构函数的执行时刻 __construct()构造函数传入参数 构造函数与后台登录安全

    <?php class test_construct_avg { function __construct($input = '') { $this->input = $input; } ...

  10. 全球数字货币交易所TOP20安全性评级报告

      链塔智库2018-05-03 10:28 分析师:常昊.王婧雯    来源: 链塔智库 全球加密数字货币市值超2.5万亿元,单日交易额超2000亿元,全球超过3000万人已投入加密数字货币领域. ...