python+splinter自动刷新抢票功能


Posted in Python onSeptember 25, 2018

抢票脚本,python +splinter自动刷新抢票,可以成功抢到(依赖自己的网络环境太厉害,还有机器的好坏),但是感觉不是很完美。

有大神请指导完善一下(或者有没有别的好点的思路),不胜感谢。

# -*- coding: utf-8 -*-
"""
@author: liuyw
"""
from splinter.browser import Browser
from time import sleep
import traceback
import time, sys


class huoche(object):
 """docstring for huoche"""
 driver_name=''
 executable_path=''
 #用户名,密码
 username = u"xxx@qq.com"
 passwd = u"xxxx"
 # cookies值得自己去找, 下面两个分别是上海, 太原南
 starts = u"%u4E0A%u6D77%2CSHH"
 ends = u"%u592A%u539F%2CTYV"
 # 时间格式2018-01-19
 dtime = u"2018-01-19"
 # 车次,选择第几趟,0则从上之下依次点击
 order = 0
 ###乘客名
 users = [u"xxx",u"xxx"]
 ##席位
 xb = u"二等座"
 pz=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"
 buy="https://kyfw.12306.cn/otn/confirmPassenger/initDc"
 login_url='https://kyfw.12306.cn/otn/login/init'
 def __init__(self):
  self.driver_name='chrome'
  self.executable_path='/usr/local/bin/chromedriver'


 def login(self):
  self.driver.visit(self.login_url)
  self.driver.fill("loginUserDTO.user_name", self.username)
  # sleep(1)
  self.driver.fill("userDTO.password", self.passwd)
  print u"等待验证码,自行输入..."
  while True:
   if self.driver.url != self.initmy_url:
    sleep(1)
   else:
    break

 def start(self):
  self.driver=Browser(driver_name=self.driver_name,executable_path=self.executable_path)
  self.driver.driver.set_window_size(1400, 1000)
  self.login()
  # sleep(1)
  self.driver.visit(self.ticket_url)
  try:
   print u"购票页面开始..."
   # sleep(1)
   # 加载查询信息
   self.driver.cookies.add({"_jc_save_fromStation": self.starts})
   self.driver.cookies.add({"_jc_save_toStation": self.ends})
   self.driver.cookies.add({"_jc_save_fromDate": self.dtime})

   self.driver.reload()

   count=0
   if self.order!=0:
    while self.driver.url==self.ticket_url:
     self.driver.find_by_text(u"查询").click()
     count += 1
     print u"循环点击查询... 第 %s 次" % count
     # sleep(1)
     try:
      self.driver.find_by_text(u"预订")[self.order - 1].click()
     except Exception as e:
      print e
      print u"还没开始预订"
      continue
   else:
    while self.driver.url == self.ticket_url:
     self.driver.find_by_text(u"查询").click()
     count += 1
     print u"循环点击查询... 第 %s 次" % count
     # sleep(0.8)
     try:
      for i in self.driver.find_by_text(u"预订"):
       i.click()
       sleep(1)
     except Exception as e:
      print e
      print u"还没开始预订 %s" %count
      continue
   print u"开始预订..."
   # sleep(3)
   # self.driver.reload()
   sleep(1)
   print u'开始选择用户...'
   for user in self.users:
    self.driver.find_by_text(user).last.click()

   print u"提交订单..."
   sleep(1)
   # self.driver.find_by_text(self.pz).click()
   # self.driver.find_by_id('').select(self.pz)
   # # sleep(1)
   # self.driver.find_by_text(self.xb).click()
   # sleep(1)
   self.driver.find_by_id('submitOrder_id').click()
   # print u"开始选座..."
   # self.driver.find_by_id('1D').last.click()
   # self.driver.find_by_id('1F').last.click()

   sleep(1.5)
   print u"确认选座..."
   self.driver.find_by_id('qr_submit_id').click()


  except Exception as e:
   print e


if __name__ == '__main__':
 huoche=huoche()
 huoche.start()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的自定义多线程多进程类示例
Mar 23 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
python保存数据到本地文件的方法
Jun 23 Python
Python Web编程之WSGI协议简介
Jul 18 Python
Python文件读写保存操作的示例代码
Sep 14 Python
Pycharm+Scrapy安装并且初始化项目的方法
Jan 15 Python
Python pandas实现excel工作表合并功能详解
Aug 29 Python
python实现获取单向链表倒数第k个结点的值示例
Oct 24 Python
Python浮点数四舍五入问题的分析与解决方法
Nov 19 Python
python构建指数平滑预测模型示例
Nov 21 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 Python
python+Splinter实现12306抢票功能
Sep 25 #Python
一百多行python代码实现抢票助手
Sep 25 #Python
python爬虫之自动登录与验证码识别
Jun 15 #Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 #Python
python绘制多个曲线的折线图
Mar 23 #Python
python使用Matplotlib绘制分段函数
Sep 25 #Python
python使用Matplotlib画饼图
Sep 25 #Python
You might like
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
PHP学习 运算符与运算符优先级
2008/06/15 PHP
php addslashes 函数详细分析说明
2009/06/23 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
2011/08/06 PHP
PHP中3种生成XML文件方法的速度效率比较
2012/10/06 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
js下用层来实现select的title提示属性
2010/02/23 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
微信小程序身份证验证方法实现详解
2019/06/28 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
python装饰器decorator介绍
2014/11/21 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
总经理职责
2013/12/22 职场文书
寒假家长评语大全
2014/04/16 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
女方离婚起诉书
2015/05/18 职场文书
2015年暑期社会实践总结
2015/07/13 职场文书