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中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
使用Python抓取模板之家的CSS模板
Mar 16 Python
Python实现批量读取word中表格信息的方法
Jul 30 Python
浅析python递归函数和河内塔问题
Apr 18 Python
浅谈Django的缓存机制
Aug 23 Python
Python实现网站表单提交和模板
Jan 15 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
django实现模型字段动态choice的操作
Apr 01 Python
tensorflow pb to tflite 精度下降详解
May 25 Python
Python 爬虫性能相关总结
Aug 03 Python
Python结合Window计划任务监测邮件的示例代码
Aug 05 Python
pandas中DataFrame检测重复值的实现
May 26 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中定义网站根目录的常用方法
2010/08/08 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
详解PHP队列的实现
2019/03/14 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
使用Javascript简单实现图片无缝滚动
2014/12/05 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
详解javascript函数的参数
2015/11/10 Javascript
简单的js表格操作
2016/09/24 Javascript
js定时器实例分享
2016/12/20 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
2019/01/17 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
python读取中文txt文本的方法
2018/04/12 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
python ftplib模块使用代码实例
2019/12/31 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
如何使用python写截屏小工具
2020/09/29 Python
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
农村婚礼证婚词
2014/01/10 职场文书
财务部总监岗位职责
2014/03/12 职场文书
Python制作春联的示例代码
2022/01/22 Python