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爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
Python XML RPC服务器端和客户端实例
Nov 22 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
Python导出DBF文件到Excel的方法
Jul 25 Python
Python编程中对文件和存储器的读写示例
Jan 25 Python
pyenv命令管理多个Python版本
Mar 26 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
python 搜索大文件的实例代码
Jul 08 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 14 Python
python对文档中元素删除,替换操作
Apr 02 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中使用sockets:从新闻组中获取文章
2006/10/09 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
dwr spring的集成实现代码
2009/03/22 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
带你认识Django
2019/01/15 Python
python实现dijkstra最短路由算法
2019/01/17 Python
python安装pil库方法及代码
2019/06/25 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
美国美妆网站:B-Glowing
2016/10/12 全球购物
怎么写有吸引力的自荐信
2013/11/17 职场文书
教师实习自我鉴定
2013/12/14 职场文书
高中军训第一天感言
2014/03/06 职场文书
质量承诺书怎么写
2014/05/24 职场文书
党员剖析材料范文
2014/09/30 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
公司捐书倡议书
2015/04/27 职场文书
薪资证明范本
2015/06/19 职场文书
800字作文之大雪
2019/12/04 职场文书
php中pcntl_fork详解
2021/04/01 PHP
redis内存空间效率问题的深入探究
2021/05/17 Redis
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
2022/04/12 PostgreSQL