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采用socket模拟TCP通讯的实现方法
Nov 19 Python
python 迭代器和iter()函数详解及实例
Mar 21 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
Django实现表单验证
Sep 08 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
Django Xadmin多对多字段过滤实例
Apr 07 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
keras自定义损失函数并且模型加载的写法介绍
Jun 15 Python
学习Python爬虫的几点建议
Aug 05 Python
python爬取网易云音乐热歌榜实例代码
Aug 07 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 Xdebug的安装与使用详解
2013/06/20 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
2012/05/20 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
JavaScript中string对象
2015/06/12 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
python生成excel的实例代码
2017/11/08 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
python列表的逆序遍历实现
2020/04/20 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
老干部工作先进集体事迹材料
2014/05/21 职场文书
大学生活动总结模板
2014/07/02 职场文书
公司离职证明标准格式
2014/11/18 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript