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 07 Python
使用pdb模块调试Python程序实例
Jun 02 Python
Python抽象类的新写法
Jun 18 Python
Python实现文件复制删除
Apr 19 Python
Python中元组,列表,字典的区别
May 21 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
Python读取txt某几列绘图的方法
Oct 14 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
python里的单引号和双引号的有什么作用
Jun 17 Python
零基础小白多久能学会python
Jun 22 Python
Python pickle模块常用方法代码实例
Oct 10 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 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 MVC模式在网站架构中的实现分析
2010/03/04 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
10条php编程小技巧
2015/07/07 PHP
PHP微信红包API接口
2015/12/05 PHP
php blowfish加密解密算法
2016/07/02 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
javascript json2 使用方法
2010/03/16 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
Python 文件操作实现代码
2009/10/07 Python
python错误处理详解
2014/09/28 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
Python实现的计数排序算法示例
2017/11/29 Python
python中利用h5py模块读取h5文件中的主键方法
2018/06/05 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
Python集合操作方法详解
2020/02/09 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
python pymysql库的常用操作
2020/10/16 Python
python安装sklearn模块的方法详解
2020/11/28 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
新闻学专业个人求职信写作
2014/02/04 职场文书
机修工工作职责
2014/02/21 职场文书
冰雪公主观后感
2015/06/16 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
python如何读取.mtx文件
2021/04/22 Python
pytorch Dropout过拟合的操作
2021/05/27 Python
Python读写yaml文件
2022/03/20 Python
设置IIS Express并发数
2022/07/07 Servers