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删除文件示例分享
Jan 28 Python
详解Python的Django框架中的通用视图
May 04 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
Jan 05 Python
python交互界面的退出方法
Feb 16 Python
超简单的Python HTTP服务
Jul 22 Python
python [:3] 实现提取数组中的数
Nov 27 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
基于python模拟TCP3次握手连接及发送数据
Nov 06 Python
Python源码解析之List
May 21 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 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的变量总结 新手推荐
2011/04/18 PHP
服务器变量 $_SERVER 的深入解析
2013/07/02 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
PHP实现的服务器一致性hash分布算法示例
2018/08/09 PHP
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
浅谈javascript的调试
2015/01/28 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
全面了解addEventListener和on的区别
2016/07/14 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
python3 与python2 异常处理的区别与联系
2016/06/19 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
一篇文章搞定Python操作文件与目录
2019/08/13 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
中学生自我鉴定
2014/02/04 职场文书
青春无悔演讲稿
2014/05/08 职场文书
科技工作者先进事迹
2014/08/16 职场文书
邀请函模板
2015/02/02 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
郭明义观后感
2015/06/08 职场文书