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 sys模块sys.path使用方法示例
Dec 04 Python
Python struct模块解析
Jun 12 Python
初学Python实用技巧两则
Aug 29 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
pytorch 模型的train模式与eval模式实例
Feb 20 Python
服务器端jupyter notebook映射到本地浏览器的操作
Apr 14 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
Python脚本破解压缩文件口令实例教程(zipfile)
Jun 14 Python
python如何获取网络数据
Apr 11 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 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&java(三)
2006/10/09 PHP
php中的实现trim函数代码
2007/03/19 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
javascript getElementsByClassName实现代码
2010/10/11 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
AngularJS 视图详解及示例代码
2016/08/17 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
微信小程序在线客服自动回复功能(基于node)
2019/07/03 Javascript
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
Python循环实现n的全排列功能
2019/09/16 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
Python ckeditor富文本编辑器代码实例解析
2020/06/22 Python
Python实现自动签到脚本功能
2020/08/20 Python
行政人员工作职责
2013/12/05 职场文书
行政专员工作职责
2013/12/22 职场文书
大学运动会通讯稿
2014/01/28 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
高中班级口号
2014/06/09 职场文书
2014幼儿园保育员工作总结
2014/11/10 职场文书
接收函
2019/04/22 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
MySQL插入数据与查询数据
2022/03/25 MySQL