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中使用lambda高效操作列表的教程
Apr 24 Python
Python中逗号的三种作用实例分析
Jun 08 Python
使用rst2pdf实现将sphinx生成PDF
Jun 07 Python
详解python读取和输出到txt
Mar 29 Python
Python3.0中普通方法、类方法和静态方法的比较
May 03 Python
十分钟搞定pandas(入门教程)
Jun 21 Python
在交互式环境中执行Python程序过程详解
Jul 12 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
python深copy和浅copy区别对比解析
Dec 26 Python
Python文件操作模拟用户登陆代码实例
Jun 09 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 会话(session 时间设定)使用入门代码
2008/06/05 PHP
php PDO中文乱码解决办法
2009/07/20 PHP
php笔记之常用文件操作
2010/10/12 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
php实现读取内存顺序号
2015/03/29 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
Python实现比较两个列表(list)范围
2015/06/12 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
个人授权委托书范本
2014/04/03 职场文书
电台编导求职信
2014/05/06 职场文书
班组长安全工作职责
2014/07/15 职场文书
高中教师个人工作总结
2015/02/10 职场文书
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL