1. 先看动态结果:只能到预定锁定车票,30分钟内手动付款,车票会被自动取消。

    如果是暂无余票,就会一直查询余票信息,直到有余票时,自动预定,比如G7暂无余票,为了防止反爬虫,设置的刷票间隔时间长一点,这样更安全。

  2. 使用selenium+chromedriver工具,自动查询余票,和订票,如果暂时无票,程序会一直不停的查询余票情况。
  3. 首先需要输入出发城市,到达城市,和乘车日期,车次,乘车人等信息,然后登陆,实现自动购票。
  4. 不足之处:不能同时查询,多个车次,正在尝试选择解决办法。
  5. 代码如下
    # project:  12306
    # author:  liulei
    # time:  2019/8/20 8:44
    # file:  qiangpiao1.py
    import random
    import timefrom selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC #期望的条件
    from selenium.webdriver.common.by import Byclass Qiangpiao(object):def __init__(self):self.login_url = 'https://kyfw.12306.cn/otn/login/init'self.initmy_url = 'https://kyfw.12306.cn/otn/view/index.html'# self.initmy_url = 'https://kyfw.12306.cn/otn/index/initMy12306'self.search_url = 'https://kyfw.12306.cn/otn/leftTicket/init'self.confirmPassenger = 'https://kyfw.12306.cn/otn/confirmPassenger/initDc'self.driver = webdriver.Chrome(executable_path=r'C:\chromedriver\chromedriver.exe') #驱动chrome浏览器进行操作def wait_input(self):self.from_station = input('出发地:')self.to_station = input('目的地:')        self.depart_time = input('出发日期:')     self.passengers = input('乘客姓名(多名乘客请用英文逗号隔开):').split(',')self.trains = input('车次:').split(',') def _login(self):self.driver.get(self.login_url) #打开登录界面WebDriverWait(self.driver,1000).until(EC.url_to_be(self.initmy_url))print('登录成功!')def _order_ticket(self):       self.driver.get(self.search_url)WebDriverWait(self.driver, 1000).until(EC.text_to_be_present_in_element_value((By.ID, "fromStationText"), self.from_station))WebDriverWait(self.driver, 1000).until(EC.text_to_be_present_in_element_value((By.ID, "toStationText"), self.to_station))WebDriverWait(self.driver, 1000).until(EC.text_to_be_present_in_element_value((By.ID, "train_date"), self.depart_time))WebDriverWait(self.driver, 1000).until(EC.element_to_be_clickable((By.ID, "query_ticket")))searchBotton = self.driver.find_element_by_id("query_ticket")searchBotton.click()WebDriverWait(self.driver, 1000).until(EC.presence_of_element_located((By.XPATH,".//tbody[@id = 'queryLeftTable']/tr")))tr_list = self.driver.find_elements_by_xpath(".//tbody[@id ='queryLeftTable']/tr[not(@datatran)]")for tr in tr_list:train_number = tr.find_element_by_class_name('number').textif train_number in self.trains:left_ticket = tr.find_element_by_xpath('.//td[4]').text #找到二等座# 如果暂时无票,抢票(循环不停的刷新余票)count = 1while left_ticket == '无' or left_ticket == '--' or left_ticket =='候补':print("暂无余票,正在尝试第%s次抢票···" % count)time.sleep(random.randint(300, 1000))searchBotton.click()count += 1if left_ticket == '有' or left_ticket.isdigit: #判断输入的车次是否在列表中orderBotton = tr.find_element_by_class_name('btn72')orderBotton.click()WebDriverWait(self.driver, 1000).until(EC.url_to_be(self.confirmPassenger))WebDriverWait(self.driver, 1000).until(EC.presence_of_element_located((By.XPATH,".//ul[@id = 'normal_passenger_id']/li")))passanger_labels = self.driver.find_elements_by_xpath(".//ul[@id = 'normal_passenger_id']/li/label")for passanger_label in passanger_labels: name = passanger_label.textif name in self.passengers:time.sleep(1)passanger_label.click() submitBotton = self.driver.find_element_by_id('submitOrder_id')time.sleep(1)submitBotton.click()WebDriverWait(self.driver, 1000).until(EC.presence_of_element_located((By.CLASS_NAME,'dhtmlx_wins_body_outer')))WebDriverWait(self.driver, 1000).until(EC.presence_of_element_located((By.ID,'qr_submit_id')))ConBotton = self.driver.find_element_by_id('qr_submit_id')time.sleep(1)ConBotton.click()print("车票预定成功,请手动完成支付!")print("系统正常退出……")exit()def run(self):self.wait_input()self._login()self._order_ticket()if __name__ == '__main__':spider = Qiangpiao()spider.run()

12306抢票爬虫selenium+Chromedriver(需手动完成支付)相关推荐

  1. 爬虫实战篇---12306抢票爬虫

    12306抢票爬虫 先直接上一下效果图吧: 图片上信息是抢票成功后的界面 1.技术路线 selenium + chromedriver 2.思路分析 (1).模拟浏览器登录抢票界面,手动进行登录 (2 ...

  2. 12306 抢票 python + selenium + chrome (二) 基础准备的软件和材料

    我使用的 vmware 14 + ubuntu 16  +  PyCharm  开发环境 12306抢票 python+selenium+chrome 实现一 12306抢票 python+selen ...

  3. python编程实践(3):python+selenium实现12306抢票脚本

    又到了一年一度的春运时节,抢个票? 1.设计思路 如果我们要买一张火车票,我们会怎么做?打开12306,登陆,输入出发地和目的地,选择出行日期,然后点击查询,有余票的话就下单购买,没有票就点刷新或者等 ...

  4. python3+selenium实现12306抢票脚本

    文章目录 一. 环境配置 windows环境 mac.linux环境 二. 实现思路及代码 1. 查询票数 2. 登录 关于自动登录 3. 提交订单 4. 邮件提醒 5. 短信提醒 三.总结与分析 一 ...

  5. Python selenium+pyautogui写的一个12306抢票

    用selenium+pyautogui写的一个12306抢票 `` 最近处于找工作阶段,在家里闲着无聊,写了一个12306的抢票,还很简陋,也是第一次写文发帖,大佬勿喷. 首先导入模块部分.有些外部库 ...

  6. python+selenium实现12306抢票

    python+selenium实现12306抢票 一.准备工作 1.要先下载相关的包,selenium.interval.最好使用国内清华源 pip install (which package) - ...

  7. Python爬虫实战之12306抢票

    12306抢票 前言 一.爬虫是什么? 二.使用步骤 1.引入库 2.爬虫代码 3.城市编码 4.主程序 总结 前言 提示:用python实现简单的12306余票查询 提示:以下是本篇文章正文内容,下 ...

  8. python爬虫抢火车票_如何用python写一个简单的12306抢票软件|python 爬火车票 教程...

    python 如果抓取验证码图片 类似12306的登录验证码图片 这个以前做次.最大的麻烦是码的识别算法的识别率太低.12306那种网站登陆错3次就限制你20分钟.所以除非你有33%以上的识别率否则不 ...

  9. python抢票web端_python+Splinter实现12306抢票功能

    本文实例为大家分享了python实现12306抢票功能的具体代码,供大家参考,具体内容如下 源码记录如下: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # ...

最新文章

  1. 关于织梦系统不支持php中GD库的问题
  2. java面试④数据库部分
  3. win与linux渊源,微软与Linux从对立走向合作,WSL是如何诞生的
  4. Go 语言基础(七) 之 并发和网络
  5. error C2065: 'assert' : undeclared identifier
  6. postman与Jmeter调用接口
  7. [转载] Python format()格式:中文对齐问题
  8. MySQL必知必会笔记(六)存储过程 游标 触发器
  9. Rhino显示左边的工具栏
  10. 微信接口报错:40163
  11. java使用poi读写word中的图片(二)
  12. 巡逻机器人(BFS)
  13. 损失函数——均方误差(Mean Squared Error,MSE)
  14. Transactional Client
  15. 18北大考研经验贴汇总
  16. 百度云高速下载Pandownload
  17. 2010大四面试经验(历程总结,笔试,群面,一面,二面,霸笔,霸面技巧和心得)
  18. node.js在注册表删除_Node.JS 11年:时间表和重要贡献
  19. 感人的小故事,谁懂谁就会流泪
  20. NC6 的单据类型枚举 类

热门文章

  1. 盘点直播直播平台软件开发技术中的编解码、直播协议、网络传输与简单实现
  2. 科沃斯扫地机器人哪个型号最实用_扫地机器人哪个型号好_智能扫地机功能-科沃斯机器人官网-科沃斯机器人官网...
  3. word无法启动转换器RECOVR32.CNV
  4. msf添加路由及socks5代理
  5. 务化框架技术选型与京东JSF解密
  6. 前端系列主题:从宏观到细节为前端性能优化全方位讲解!
  7. 中国石油大学《机械基础(设计与制造)》第三阶段在线作业
  8. 使用canal监听binlog将数据发送到RocketMQ同步到es
  9. 邦纳Q4XTULAF300-Q8传感器
  10. 如何用手机和华为平板控制LED透明屏?方法及功能盘点!