初级模拟,速度有点慢,后期有时间再优化

  1 # -*- coding:utf-8 -*-
  2 # author:zxy
  3 # date:2018-12-23
  4
  5 from selenium import webdriver
  6 from selenium.webdriver.support.ui import WebDriverWait
  7 from selenium.webdriver.support import expected_conditions as EC
  8 from selenium.webdriver.common.by import By
  9 from http.cookiejar import CookieJar
 10 from urllib import request
 11 from urllib import parse
 12
 13
 14 class login_12306():
 15     def get_opener(self):
 16         # 1登录
 17         # 1.1 创建一个CookieJar对象
 18         self.cookiejar = CookieJar()
 19         # 1.2 使用cookiejar创建一个HTTPCookieProcessor()对象
 20         self.handler = request.HTTPCookieProcessor(self.cookiejar)
 21         # 1.3 使用上一步创建的handler创建一个opener
 22         opener = request.build_opener(self.handler)
 23         return opener
 24
 25 class ticketGradding():
 26
 27     def __init__(self):
 28         self.driver_path = r"E:\chromDriver\chromedriver.exe"
 29         self.initMy_url = "https://kyfw.12306.cn/otn/view/index.html"
 30         self.driver = webdriver.Chrome(executable_path=self.driver_path)
 31         self.login_url = "https://kyfw.12306.cn/otn/login/init"
 32         self.ticket_url = "https://kyfw.12306.cn/otn/leftTicket/init"
 33         self.confirm_url = "https://kyfw.12306.cn/otn/confirmPassenger/initDc"
 34
 35     def _wait_input(self):
 36         self.from_station = input("起始站")
 37         self.to_station = input("目的地")
 38
 39         # 时间格式  yyyy-MM-dd
 40         self.depart_time = input("出发时间:")
 41         self.passengers = input("乘客姓名(如有多个乘客,用英文逗号隔开):").split(",")
 42         self.trains = input("车次(如果多个车次,用英文逗号隔开):").split(",")
 43
 44     def _login(self):  # 函数名前加_,表示该函数只能在当前类使用
 45         self.driver.get(self.login_url)
 46         # 显示等待
 47         # 隐示等待
 48         WebDriverWait(self.driver, 1000).until(
 49             EC.url_to_be(self.initMy_url)
 50         )
 51         print("登陆成功")
 52
 53     def _order_ticket(self):
 54         # 跳转到查余票的界面
 55         self.driver.get(self.ticket_url)
 56         self.tickets = []
 57         # 等待出发地是否输入正确
 58         WebDriverWait(self.driver, 1000).until(
 59
 60             # 元组
 61             EC.text_to_be_present_in_element_value((By.ID, "fromStationText"), self.from_station)
 62         )
 63
 64         # 等待目的地时候输入正确
 65         WebDriverWait(self.driver, 1000).until(
 66             EC.text_to_be_present_in_element_value((By.ID, "toStationText"), self.to_station)
 67         )
 68
 69         # 等待出发时间是否输入正确
 70         WebDriverWait(self.driver, 1000).until(
 71             EC.text_to_be_present_in_element_value((By.ID, "train_date"), self.depart_time)
 72         )
 73
 74         # 等待查询按钮是否可用
 75         WebDriverWait(self.driver, 1000).until(
 76             EC.element_to_be_clickable((By.ID, 'query_ticket'))
 77         )
 78
 79         # 执行查询事件
 80         searchBtn = self.driver.find_element_by_id('query_ticket')
 81         searchBtn.click()
 82
 83         # 等待显示车次信息
 84         WebDriverWait(self.driver, 1000).until(
 85             EC.presence_of_element_located((By.XPATH, ".//tbody[@id='queryLeftTable']/tr"))
 86         )
 87
 88         tr_list = self.driver.find_element_by_xpath(".//tbody[@id='queryLeftTable']/tr[not (@datatrain)]")
 89
 90         for tr in tr_list:
 91             train_number = tr.find_element_by_class_name("number").text
 92             if train_number in self.trains:
 93                 best_ticket = tr.find_element_by_xpath(".//td[2]").text
 94                 first_ticket = tr.find_element_by_xpath(".//td[3]").text
 95                 second_ticket = tr.find_element_by_xpath(".//td[4]").text
 96                 super_soft_ticket = tr.find_element_by_xpath(".//td[5]").text
 97                 soft_lay_ticket = tr.find_element_by_xpath(".//td[6]").text
 98                 move_lay_ticket = tr.find_element_by_xpath(".//td[7]").text
 99                 hard_lay_ticket = tr.find_element_by_xpath(".//td[8]").text
100                 sort_sit_ticket = tr.find_element_by_xpath(".//td[9]").text
101                 hard_sit_ticket = tr.find_element_by_xpath(".//td[10]").text
102                 no_sit_ticket = tr.find_element_by_xpath(".//td[11]").text
103                 others = tr.find_element_by_xpath(".//td[12]").text
104                 # self.tickets.append(best_ticket,first_ticket,second_ticket,super_soft_ticket,soft_lay_ticket,\
105                 #                     move_lay_ticket,hard_lay_ticket,sort_sit_ticket,hard_sit_ticket,\
106                 #                     no_sit_ticket,others)
107                 orderBtn = tr.find_element_by_class_name("btn72")
108                 if best_ticket.isdigit or best_ticket == "有":
109                     print(train_number + "商务座特等座有票,序号为0")
110                     # orderBtn.click()
111                 elif first_ticket.isdigit or first_ticket == "有":
112                     print(train_number + "一等座有票,序号为1")
113                     # orderBtn.click()
114                 elif second_ticket.isdigit or second_ticket == "有":
115                     print(train_number + "二等座有票,序号为2")
116                     # orderBtn.click()
117                 elif super_soft_ticket.isdigit or super_soft_ticket == "有":
118                     print(train_number + "三等座有票,序号为3")
119                     # orderBtn.click()
120                 elif soft_lay_ticket.isdigit or soft_lay_ticket == "有":
121                     print(train_number + "高级软卧有票,序号为4")
122                 elif move_lay_ticket.isdigit or move_lay_ticket == "有":
123                     print(train_number + "软卧有票,序号为5")
124                 elif hard_lay_ticket.isdigit or hard_lay_ticket == "有":
125                     print(train_number + "动卧有票,序号为6")
126                 elif sort_sit_ticket.isdigit or sort_sit_ticket == "有":
127                     print(train_number + "软座有票,序号为7")
128                 elif hard_sit_ticket.isdigit or hard_sit_ticket == "有":
129                     print(train_number + "硬座有票,序号为8")
130                 elif no_sit_ticket.isdigit or no_sit_ticket == "有":
131                     print(train_number + "无座有票,序号9")
132                 elif others.isdigit or others == "有":
133                     print(train_number + "其他有票,序号10")
134
135                 choice = input("请输入有票的且座位等级对应的编号:")
136                 if (choice):
137                     orderBtn.click()
138
139                     # 确认选票页面
140                     WebDriverWait(self.driver, 1000).until(
141                         EC.url_to_be(self.confirm_url)
142                     )
143
144     def run(self):
145         self._wait_input()
146         self._login()
147         self._order_ticket()
148
149
150 if __name__ == '__main__':
151     spider = ticketGradding()
152     spider.run()

转载于:https://www.cnblogs.com/z-712/p/10614512.html

以selenium模拟登陆12306相关推荐

  1. php selenium模拟登陆,12306 的selenium实现模拟登陆

    # 下面是12306 实现的模拟登陆 # 解码 应用超级鹰,注册用户,左侧栏软件ID进去,开启一个新软件,拿到软件ID # 下面测试都在jupyter里面实现 # 超级鹰类 cell import r ...

  2. selenium模拟登录12306

    利用selenium模拟登录12306,但是12306的登陆要想模拟还挺难的,需要先进行坐标识别,识别出来之后还要在进行滑块拖动验证识别,这里做一下记录. 这里的坐标识别是用的超级鹰,有时也会坐标识别 ...

  3. selenium模拟登陆豆瓣并获取cookies

    验证码处理与模拟登陆豆瓣,首先我们看到豆瓣没有cookies,我们需要用程序来模拟登陆获取cookies(当前有些情况下自己手动登陆后复制粘贴cookies也能登陆),该文主要讲方法,如何用selen ...

  4. 爬取知乎壁纸:selenium模拟登陆获取cookies,再将cookies传递给requests

    selenium很好用,但是爬取大量数据时速度较慢. 通过selenium模拟登陆,获取cookies,再将cookies传递给requests,通过requests爬取加快速度. 以为知乎网爬取壁纸 ...

  5. selenium模拟登陆淘宝遇到的问题及解决

    今天忽然想用爬虫登陆淘宝,于是就试着写一下, 我是用selenium模拟登陆,我先是打开淘宝登陆页面发现淘宝的登陆界面是这样的 我就用代码写了一个模拟登陆:如下这是最终代码 import time f ...

  6. java使用Selenium模拟登陆58(验证码登陆密码登陆)若快平台识别文字点击验证码

    文章目录 写在前面 配置环境 Selenium入门 使用Selenium登陆58 若快平台识别文字点击验证码 附: By对象中的 xpath & cssSelector获取方式** 不打开浏览 ...

  7. 使用Python模拟登陆12306并全自动下单

    最近一段时间一直在研究用Python模拟登陆12306网站并自动刷票下单,经过一段时间的摸索,终于完成了代码,实现了12306刷票的功能.话不多说,先给大伙儿看看成果.我录制了一段时间,展示了自动刷票 ...

  8. Python3 爬虫实战 — 模拟登陆12306【点触验证码对抗】

    登陆时间:2019-10-21 实现难度:★★★☆☆☆ 请求链接:https://kyfw.12306.cn/otn/resources/login.html 实现目标:模拟登陆中国铁路12306,攻 ...

  9. selenium模拟登陆时截取验证码

    模拟登陆时,经常会遇到有验证码的问题,那么就需要把验证码给截取下来. 如下为截取验证码程序,该程序的原始地址为:http://www.cnblogs.com/donaldlee2008/p/53045 ...

最新文章

  1. 【数据结构】链表中的 指针,地址
  2. 数据恢复工具,每秒钟扫描 1000万文件!
  3. HDU 1231 最大连续子序列
  4. 机器学习(Machine Learning)深入学习(Deep Learning)资料
  5. 构造方法注入和设值注入有什么区别?
  6. EYQiPa,梦开始的地方
  7. C++ 常用设计模式
  8. xstatic图形连接linux,RHCE认证考试模拟题深入讲解:linux配置静态IP地址为:192.168.0.X!...
  9. 睡眠监测中的一些术语和指标(AASM)
  10. 实验室计算机主机关,计算机综合实验室管理办法
  11. 数学建模【开会总结】
  12. 机器学习模型评估方法
  13. 【洞见研报】网络游戏薪酬报告(薪酬报告,网络游戏,游戏公司岗位)
  14. 商品绑定可用的优惠券(多对多的绑定且一张优惠券只能使用于一个商品)
  15. PHP中=是什么意思
  16. Ubuntu16.04安装VCS和Verdi遇到的两个问题
  17. FireBox与Chrome,FireBox 对代码执行严格
  18. FPGA——1位全加器和4位全加器的实现
  19. 快速上手Django(六) -Django之Django drf 序列化器Serializer类
  20. 电磁仿真在EMC设计中的应用案例

热门文章

  1. Qt中的默认文件夹路径获取方法
  2. 雷达模拟器 HPx-310
  3. 属于不安全的http请求方法的是_解冻方法那么多,哪一种最好?你常用的方法可能最不安全...
  4. QCustomplot 层 (七)
  5. 20180615小测
  6. 虚拟机的远程桌面连不上怎么解决
  7. WPF 项目开发入门(十)DevExpress 插件+NHibernate 登录实现
  8. 怎么截取手游发送到服务器的信息,游戏是如何从服务器走到手机:发行流程的简单描述...
  9. js canvas 五指棋,138行实现五指棋
  10. 文献阅读001:由I类HLA转录缺失导致的联合免疫治疗的获得性癌症耐药性