# -*- coding: utf-8 -*-

from splinter.browser import Browser
from time import sleep
import traceback #初始化信息 # 用户名,密码
username = u"用户名"
passwd = u"密码"
# cookies值得自己去找
starts = u"杭州,HZH"
ends = u"黄石,HSN"
# 时间格式2016-03-22
dtime = u"2016-03-22"
# 车次,选择第几趟,0则从上之下依次点击
order = 0
###乘客名,如果是自己,则上面有个链接是自己的,会跳转到个人中心,用index[1]
#如果乘客不是自己,则用index[0]
pa = 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():
#点击登录,从购票页面调到了登录页面
b.find_by_text(u"登录").click()
sleep(3)
#给name为loginUserDTO.user_name附上用户名
#也可以用Id查找的方法b.find_by_id('username').fill(username)
b.fill("loginUserDTO.user_name", username)
sleep(1)
#给name为userDTO.password值
b.fill("userDTO.password", passwd)
sleep(1)
#验证码必须手动输入
print u"等待验证码,自行输入..." #检测页面是否跳转(用户是否输入了验证码并且提交)
while True:
if b.url != initmy_url:
sleep(1)
else:
break def huoche():
global b
b = Browser(driver_name="chrome")
#访问12306
b.visit(ticket_url) #查找带登录的字符串,u是避免中文报错
while b.is_text_present(u"登录"):
sleep(1)
#如果存在调用登录方法
login()
if b.url == initmy_url:
break #当执行完login方法后,登录成功,继续向下执行
try:
print u"购票页面..."
# 跳回购票页面
b.visit(ticket_url) # 加载查询信息
b.cookies.add({"_jc_save_fromStation": starts})
b.cookies.add({"_jc_save_toStation": ends})
b.cookies.add({"_jc_save_fromDate": dtime})
b.reload() sleep(2) count = 0
# 循环点击预订
#order=0则从第一班车开始全部依次预订
if order != 0:
#如果页面没有跳转到,说明没有抢到票,继续抢票
while b.url == ticket_url:
#点击查询进行刷新
b.find_by_text(u"查询").click()
count +=1
print u"循环点击查询... 第 %s 次" % count
sleep(1)
try:
#点击预订的那班车
b.find_by_text(u"预订")[order - 1].click()
except:
print u"还没开始预订"
continue
else:
while b.url == ticket_url:
b.find_by_text(u"查询").click()
count += 1
print u"循环点击查询... 第 %s 次" % count
sleep(1)
try:
#从第一个开始依次预订
for i in b.find_by_text(u"预订"):
i.click()
except:
print u"还没开始预订"
continue
sleep(1)
#若循环结束了,则选择联系人
b.find_by_text(pa)[0].click()
print u"能做的都做了.....不再对浏览器进行任何操作"
except Exception as e:
print(traceback.print_exc()) if __name__ == "__main__":
huoche()

python自动抢票的更多相关文章

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

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

  2. python+selenium实现自动抢票

    使用说明 程序运行开始,需要输入出发地,目的地,出发时间,乘客信息,车次:乘客信息和车次可以输入多个 刚刚开始学习爬虫,selenium仅仅是解放了双手,运行效率不是很高: 程序运行时会打开chrom ...

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

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

  4. c# 模拟 网页实现12306登陆、自动刷票、自动抢票完全篇

    这一篇文章,我将从头到尾教大家使用c#模拟网页面登陆12306网站,自动刷票,选择订票人,到最后一步提交订单.研究过HTTP协议的童鞋们都知道,我们在访问网站时,是有两种方式的,POST和GET方式, ...

  5. 360自动抢票还不够,几行js代码设置无人值守

    360就是牛逼哄哄的...... 但是最近在使用360浏览器抢票的时候还是发现了一些体验不好的地方,比如搞着搞着就退出了登录,有时候能帮你自动登录进去,但是自动登录之后又不会帮你自动开始抢.然后验证码 ...

  6. 基于selenium+java的12306自动抢票

    import java.util.concurrent.TimeUnit; import org.openqa.selenium.By;import org.openqa.selenium.Keys; ...

  7. python写12306抢票

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

  8. Python 实现的 12306抢票脚本

    Python12306抢票脚本 本脚本使用一个类来实现所有代码,大体上分为以下几个模块及其步骤:- 初始化对象属性(在抢票前进行的属性初始化,包括初始化浏览器模拟对象,个人信息等).- 建立模拟浏览器 ...

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

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

随机推荐

  1. Java编程思想 学习笔记12

    十二.通过异常处理错误  Java的基本理念是“结构不佳的代码不能运行”. Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型.可靠的程序的生成,并且通过这种方式可以使你更加自信:你的 ...

  2. Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器

    一.map/reduce map map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次 作用到序列的每个元素,并把结果作为新的Iterator返回. reduce r ...

  3. IntelliJ IDEA 界面介绍及常用配置

    一:配置Maven File-->Settings-->搜索框输入maven -->配置maven home directory 跟 user setting file 二:配置JD ...

  4. JAVA迭代器学习--在JAVA中实现线性表的迭代器

    1,迭代器是能够对数据结构如集合(ADT的实现)进行遍历的对象.在遍历过程中,可以查看.修改.添加以及删除元素,这是它与一般的采用循环来遍历集合中的元素不同的地方.因为,通常用循环进行的遍历操作一般是 ...

  5. Mysql高级查询 内连接和外连接详解

    一.内连接(INNER JOIN) 1.等值连接 概述:指使用等号"="比较两个表的连接列的值,相当于两表执行笛卡尔后,取两表连结列值相等的记录. 语法: SELECT 列 FRO ...

  6. C++函数返回局部变量

    函数不能返回指向栈内存的指针 原因:返回值是拷贝值,局部变量的作用域为函数内部,函数执行结束,栈上的局部变量会销毁,内存释放. 可返回的局部变量: 1. 返回局部变量本身 int sum(int a, ...

  7. Kali2.0更新

    下载链接:猛戳这里 更新以后速度与界面友好性提高了! 界面仿造了ubuntu和fedora,应用也有很多小图标!这个对个人来说比较赞 安装以后的几件事 1.安装vmtools,方法跟1.0一样! ta ...

  8. 批量下载Coursera及其他场景上的文件

    以下方法同样适用于其他场景的批量下载. 最近在学习Coursera退出的深度学习课程,我希望把课程提供的作业下载下来以备以后复习,但是课程有很多文件,比如说脸部识别一课中的参数就多达226个csv文件 ...

  9. ES系列十、ES常用查询API

    1.term查询 { "query": { "term": { "title": "crime" } } } 1.1.指 ...

  10. HTML学习笔记01-HTML简介

    主要是为了做接口测试,试着自己写爬虫,所以学习一下HTML一些基础的东西,方便用来解析网页.学习内容主要来自菜鸟教程的HTML教程,W3school的HTML 超文本标记语言(英语:HyperText ...