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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
Python函数中的函数(闭包)用法实例
Mar 15 Python
浅谈Python 字符串格式化输出(format/printf)
Jul 21 Python
centos6.4下python3.6.1安装教程
Jul 21 Python
pytorch 把MNIST数据集转换成图片和txt的方法
May 20 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
Oct 29 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
python 爬取吉首大学网站成绩单
Jun 02 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 23 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
php fread读取文件注意事项
2016/09/24 PHP
实例讲解php实现多线程
2019/01/27 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
[05:09]DOTA2-DPC中国联赛2月22日Recap集锦
2021/03/11 DOTA
Python中的文件和目录操作实现代码
2011/03/13 Python
深入理解Python装饰器
2016/07/27 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
Python重新加载模块的实现方法
2018/10/16 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
2019/05/27 Python
python对csv文件追加写入列的方法
2019/08/01 Python
django基于restframework的CBV封装详解
2019/08/08 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
python 画条形图(柱状图)实例
2020/04/24 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
不用游标的SQL语句有哪些
2012/09/07 面试题
入党积极分子思想汇报
2014/01/02 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
公司经营目标责任书
2015/01/29 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python