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制作简单的钢琴程序的教程
Apr 01 Python
Python实现简单拆分PDF文件的方法
Jul 30 Python
Python通过Pygame绘制移动的矩形实例代码
Jan 03 Python
python使用folium库绘制地图点击框
Sep 21 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
Jun 18 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
Django之PopUp的具体实现方法
Aug 31 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
Django choices下拉列表绑定实例
Mar 13 Python
Python描述符descriptor使用原理解析
Mar 21 Python
python实点云分割k-means(sklearn)详解
May 28 Python
Python 远程开关机的方法
Nov 18 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
动易数据转成dedecms的php程序
2007/04/07 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
javascript里的条件判断
2007/02/27 Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
Python函数式编程实例详解
2020/01/17 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
大学生就业推荐信范文
2013/11/29 职场文书
个人汇报材料范文
2014/12/30 职场文书
学校食品安全责任书
2015/01/29 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
晶体管单管来复再生式收音机
2021/04/22 无线电
浅谈MySQL 亿级数据分页的优化
2021/06/15 MySQL