12306爬虫抢票软件代码

news/2024/10/22 16:21:07/
'''1、需要登录页面,手动输入账号密码!
2、地查询车次,输入  起点、目的、出发时间,找到车次,就进行选择
3、选择完成后,就查询该车次是否有余票(进行显示)如果有就进行购买,没有就进行循环
4、如果有就进入购买界面,找到 或者 输入 乘车人信息 ,提交
5、点击提交按钮,付款完成抢票https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc&fs=%E5%8C%97%E4%BA%AC,BJP&ts=%E4%B8%8A%E6%B5%B7,SHH&date=2021-05-19&flag=N,N,Y
https://kyfw.12306.cn/otn/confirmPassenger/initDc
'''
import time
import requests
from 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 By
from selenium.webdriver.common.keys import Keys
import lxml
import reclass Qiangpiao(object):def __init__(self,text_):self.login_url = 'https://kyfw.12306.cn/otn/resources/login.html'           #登录页面self.inter_url = 'https://kyfw.12306.cn/otn/view/index.html'                #信息界面self.option_url = 'https://kyfw.12306.cn/otn/leftTicket/init'               #选择页面#self.display_url = 'https://kyfw.12306.cn/otn/leftTicket/init'              #显示所有车次的页面self.purchase_url = 'https://kyfw.12306.cn/otn/confirmPassenger/initDc'     #预定付款界面self.driver = webdriver.Chrome('F:\python\PyCharm Community Edition 2020.3.3\\bin\chromedriver.exe')# 驱动chrome浏览器进行操作def wait_input(self):self.from_station = "北京"#input('出发地:')self.to_station = "上海"#input('目的地:')# 时间格式一定要对应self.depart_time = "2021-06-07"#input('出发时间:')# 名字一定要存在于常用联系人中间self.passengers = "张三"#input('乘客姓名:(如有多个乘客使用英文逗号分割)').split(',')self.trains = ["G101"] #input('车次:(如有多个车次使用英文逗号分割)').split(',')  # 结果[G234,...]def login(self):self.driver.get(self.login_url)    #判断是否进入了登录界面WebDriverWait(self.driver, 1000).until(EC.url_to_be(self.inter_url))#EC.url_to_be(url)判断是否是 url 这个网页,必须一致,如果是返回True,否则返回False#driver:浏览器驱动,1000是最长超时时间(timeout:最长超时时间,默认以秒为单位)#登录账号密码print('恭喜您,您已登录成功了!')def dataGain(self):self.driver.find_element_by_id("fromStationText").click()fromStationText = self.driver.find_element_by_id("fromStationText")fromStationText.send_keys(Keys.BACK_SPACE)fromStationText.send_keys("北京")fromStationText = self.driver.find_element_by_id("fromStationText")fromStationText.send_keys(Keys.ENTER)#安照输入需要哪些步骤,就需要执行哪些代码self.driver.find_element_by_id("toStationText").click()toStationText = self.driver.find_element_by_id("toStationText")toStationText.send_keys(Keys.BACK_SPACE)toStationText.send_keys("上海")toStationText.send_keys(Keys.ENTER)#出发时间x = Truewhile x == True :a = 5 #int(input("请输入0-16之间的数字:"))if 0 <= a < 16:to_time = self.driver.find_elements(By.XPATH,'//*[@id="date_range"]/ul/li['+str(a)+']')#这个XPATH是按钮整个外结构的XPATHto_time[0].click()x = Falseelse:print("输入有误,请重新输入!!")#to_time[0].send_keys(Keys.ENTER)time.sleep(5)def _order_ticket(self):self.driver.get(self.option_url)sear = self.driver.find_element_by_id("gb_closeDefaultWarningWindowDialog_id").click()#self.driver.find_element_by_id("fromStationText").send_keys("北京")#se = self.driver.find_element_by_id("fromStation_icon_image").click()       #点击所要输入的地址,先爬取到所有的地址self.dataGain()#self.driver.find_element_by_xpath(' //*[@id="ticket_240000G1010Q_01_11"]/td[13]').click()                                         # 获取到点击事件#找到点击按钮,执行点击事件traintime.sleep(5)'''trains_list = self.driver.find_elements_by_class_name("number")       #车次列表start_list = self.driver.find_elements_by_class_name("start-s")       #出发站end_list = self.driver.find_elements_by_class_name("end-s")           #终点站start_end_time_list = self.driver.find_elements_by_class_name("cds")  #出发时间和到达时间last_list = self.driver.find_elements_by_class_name("ls")             #历时business_list = self.driver.find_elements_by_class_name("t-num")      #商务座的票you_list = self.driver.find_elements_by_class_name("yes")             #一等座in_class = self.driver.find_elements_by_class_name("bgc")'''# 需要等待信息加载......self.driver.find_elements(By.ID, 'queryLeftTable')# 需要找到tr标签进行加载信息tr_list = self.driver.find_elements_by_xpath('//*[@id="queryLeftTable"]/tr[not(@datatran)]')    #获取到了所有的标签框,里面有所有的车次start_list = self.driver.find_elements_by_class_name("cdz")           #出发站和终点站  okstart_end_time_list = self.driver.find_elements_by_class_name("cds")  # 出发时间和到达时间  oklast_list = self.driver.find_elements_by_class_name("ls")  # 历时         okleft_ticket1 = self.driver.find_elements_by_xpath(".//td[2]")[1:]   #商务座的名额剩余,切片操作一下,第一个不是所需要的内容left_ticket2 = self.driver.find_elements_by_xpath(".//td[3]")   #一等座的名额剩余left_ticket3 = self.driver.find_elements_by_xpath(".//td[4]")   #二等座的名额剩余left_ticket4 = self.driver.find_elements_by_xpath(".//td[5]")   #高级软卧的名额剩余left_ticket5 = self.driver.find_elements_by_xpath(".//td[6]")   #软卧一等卧的名额剩余left_ticket6 = self.driver.find_elements_by_xpath(".//td[7]")   #动卧的名额剩余left_ticket7 = self.driver.find_elements_by_xpath(".//td[8]")   #硬卧二等卧的名额剩余left_ticket8 = self.driver.find_elements_by_xpath(".//td[9]")   #软座的名额剩余left_ticket9 = self.driver.find_elements_by_xpath(".//td[10]")   #硬座的名额剩余left_ticket10 = self.driver.find_elements_by_xpath(".//td[11]") #无座的名额剩余left_ticket11 = self.driver.find_elements_by_xpath(".//td[12]") #其他的名额剩余x = 0# 打印出所有的标签tplt1 = "{0:<0}\t{1:^9}\t{2:^9}\t{3:^9}\t{4:^9}\t{5:^9}\t{6:^9}\t{7:^9}\t{8:^9}\t{9:^9}\t{10:^5}\t{11:^9}\t{12:^9}\t{13:^9}\t{14:^9}"for tr in tr_list:x += 1print(tplt1.format("编号", "车次", "出发站和终点站", "出发时间和到达时间", "历时", "商务座", "一等座", "二等座", "高等软卧", "软卧一等座", "动卧", "硬卧", "硬座", "无座", "其他", chr(12288)))tplt2 = "{0:<0}\t{1:^9}\t{2:^9}\t{3:^9}\t{4:^9}\t{5:^9}\t{6:^9}\t{7:^9}\t{8:^9}\t{9:^9}\t{10:^9}\t{11:^9}\t{12:^9}\t{13:^9}\t{14:^9}"for j in range(0,x):tr_text = tr_list[j].find_element_by_class_name("number")print(tplt2.format(j, tr_text.text,start_list[j].text.replace("\n","到"),start_end_time_list[j].text.replace("\n","—"),last_list[j].text.replace("\n","——"),left_ticket1[j].text,left_ticket2[j].text,left_ticket3[j].text,left_ticket4[j].text,left_ticket5[j].text,left_ticket6[j].text,left_ticket7[j].text,left_ticket8[j].text,left_ticket9[j].text,left_ticket10[j].text,left_ticket11[j].text,chr(12288)))z = 5 #int(input("请输入需要查询的车次序号:"))#找到那几个标签的内容判断是否有票print(tplt1.format("编号", "车次", "出发站和终点站", "出发时间和到达时间", "历时", "商务座", "一等座", "二等座", "高等软卧", "软卧一等座", "动卧", "硬卧","硬座", "无座", "其他", chr(12288)))for j in range(0, x):tr_text = tr_list[j].find_element_by_class_name("number")if z == j:print(tplt2.format(j, tr_text.text,start_list[j].text.replace("\n","到"),start_end_time_list[j].text.replace("\n","—"),last_list[j].text.replace("\n","——"),left_ticket1[j].text,left_ticket2[j].text,left_ticket3[j].text,left_ticket4[j].text,left_ticket5[j].text,left_ticket6[j].text,left_ticket7[j].text,left_ticket8[j].text,left_ticket9[j].text,left_ticket10[j].text,left_ticket11[j].text,chr(12288)))left_ticket12 = self.driver.find_elements_by_xpath(".//td[13]")[j].click()if WebDriverWait(self.driver, 1000).until(EC.url_to_be(self.purchase_url)) == True:print("进入预付款界面,请输入信息\n")inter = self.driver.find_element_by_class_name("lay-bd")        #获取页面基础信息print(inter.text,"\n")users = self.driver.find_element_by_class_name("per-sel")       #获取所有的人员信息print(users.text,end='')print("\n")nu = 1k = 10while nu == 1:print("0 受让人,乘车人从 1 开始")i = int(input())if i == 0:self.driver.find_element_by_class_name("btn92s").click()breakelif i == 1:check = self.driver.find_element_by_class_name("check")check[i].click()self.driver.find_element_by_id("btn92s").click()elif i > 1:check = self.driver.find_element_by_class_name("check")check[i].click()print(self.driver.find_element_by_class_name("tit").text)self.driver.find_element_by_class_name("gb_closeDefaultWarningWindowDialog_id").click()#print("是否继续添加:是:1,否:0")#nu = int(input())#获取所有的车次预约按钮'''click_list = self.driver.find_elements_by_class_name("btn72")self.driver.find_elements_by_id("tr_id_1")self.driver.find_elements_by_xpath(".//td[1]")for i,j,k in zip(trains_list,start_list,end_list):x += 1print(i.text," ",j.text," ",k.text,x)print("==============")print("=========================================================")x = 0for l in in_class:x += 1print(l.text,x)''''''x = 0for i in business_list:x += 1print(i.text, x)print("==============")print("=========================================================")x = 0for i in you_list:x += 1print(i.text, x)print("==============")
'''def run(self):self.wait_input()self.login()self._order_ticket()if __name__ == '__main__':spider = Qiangpiao(text_=None)spider.run()#spider.wait_input()#spider.login()#spider._order_ticket()

http://www.ppmy.cn/news/918472.html

相关文章

【火车票】心蓝抢票软件

实时监控抢票&#xff0c;需要 交钱购买注册。。升学 向海春 有买&#xff0c;哈哈 转载于:https://www.cnblogs.com/smilexumu/p/7489850.html

程序员放假抢票软件

分流抢票&#xff1a;https://www.bypass.cn/ 抢火车票神器

火车票软件哪个好用_抢火车票软件哪个好用?

展开全部 360抢票软件好用。 360今年除对抢票王产品进行技术升级之外&#xff0c;还加大了对手机端e68a8462616964757a686964616f31333431366432抢票软件的技术研发&#xff0c;并增加数百台服务器支持&#xff0c;使手机购票成功率显著提升。用户除了通过PC端抢票王刷票之外&a…

火车票网上抢票软件推荐(亲测)

2019抢票软件哪个好&#xff1f;面对众多的抢票软件&#xff0c;很多小伙伴们都不知道哪个成功率高&#xff0c;今天小编为大家整理了2019抢票成功率高软件推荐&#xff0c;一起来get下吧。 2019年哪款软件抢票成功率高&#xff1f;2019抢票软件哪个好&#xff1f; 1、 去哪儿旅…

微言软件出品——微言火车票抢票大师

微言软件出品——微言火车票抢票大师 2012/1/1 19:26:30 微言软件 微言抢票大师&#xff0c;是全网首个具备抢票功能的软件, 依托研发团队强大的浏览器技术能力&#xff0c;使用嵌入式IE进入中铁官网购票系统自动托管式&#xff0c;全程可视化抢票&#xff0c;让你体验软件…

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

python 如果抓取验证码图片 类似12306的登录验证码图片 这个以前做次。最大的麻烦是码的识别算法的识别率太低。12306那种网站登陆错3次就限制你20分钟。所以除非你有33%以上的识别率否则不要尝试了。 通常做法是另存验证码图片&#xff0c;通常收集几十个&#xff0c;然后训…

12306Bypass-分流抢票 火车票抢票攻略

2019独角兽企业重金招聘Python工程师标准>>> 12306Bypass-分流抢票 火车票抢票攻略 为什么要写这个 想分享些心得,让更多有缘异乡人能抢到回家的票。算是为社会做出点贡献吧(实际上,就像12306bypass 作者说的,帮助别人抢票也只是让部分人优先得到票而已,总会…

12306火车票抢票Python代码最新完整版发布,五一抢票就靠它了!

语言版本&#xff1a;Python 1、自动登录12306并保持Cookie 2、自动实现抢购设置的某日期的某车次的票 3、攻克排队系统陷阱&#xff0c;避免进入排队系统 4、循环监控某车次的票&#xff0c;直到有票&#xff0c;自动抢购 5、抢票时若出现异常&#xff0c;自动重新抢票&a…