当前位置: 首页 > 科技观察

自动抢票12306抢票文章

时间:2023-03-21 21:29:00 科技观察

本文转载自微信公众号《Python技术》,作者:佩森酱。转载本文请联系Python技术公众号。大家好,本文是关于12306的自动订票的。上一篇已经讲完了12306的自动登录,小编希望小伙伴们多点赞,以示鼓励。查询门票,先打开selenium到https://kyfw.12306.cn/otn/leftTicket/init购票查询门票。该页面只有两个操作需要手动模拟:填写出发地、目的地、出发日期,点击查询按钮12306。文本中自动写入出发地、目的地、出发日期具有以下代码的框似乎没有效果。ticket_url='https://kyfw.12306.cn/otn/leftTicket/init'self.driver.get(ticket_url)self.wait.until(self.findElement(By.ID,'fromStationText')).send_keys('上海')self.wait.until(self.findElement(By.ID,'toStationText')).send_keys('常州')self.wait.until(self.findElement(By.ID,'train_date')).send_keys('2021-07-23')self.wait.until(EC.visibility_of_element_located((By.LINK_TEXT,'query'))).click()只能另辟蹊径。在页面填写目的地、出发地点、出发日期,点击查询,发现日期值存储在F12 控制面板下的cookie中。但是没有看到出发地和目的地的汉字。我猜测可能是这些汉字被编码了,在编码网站上分析了一下。所以你可以根据猫画虎把编码后的目的地、出发地、出发日期设置到?cookie 中,并刷新页面。self.driver.add_cookie({'name':'_jc_save_fromStation','value':'%u5E38%u5DDE%2CCZH'})#常州self.driver.add_cookie({'name':'_jc_save_toStation','value':'%u4E0A%u6D77%2CSHH'})#上海self.driver.add_cookie({'name':'_jc_save_fromDate','value':'2021-08-02'})self.driver.refresh()#一暖提示弹窗self.wait.until(self.findElement(By.LINK_TEXT,'confirm')).click()self.wait.until(self.findElement(By.LINK_TEXT,'query')).click()this然后票会被刷新。找到车次所在行,点击Reservationhere,使用XPath语法找到车次所在的预订单元格,通过判断浏览器地址是否发生变化,判断是否进入预订页面。#是否进入预订页面whileself.driver.current_url==ticket_url:self.wait.until(self.findElement(By.LINK_TEXT,'query')).click()time.sleep(2)try:a=self.driver.find_element_by_xpath("//tr[@datatran='K1511']/preceding-sibling::tr[1]/child::node()[last()]/a")ifa.text=='预订':breakexceptExceptionase:print("Notrainnumber")a.click()在预订页面预订很简单,只需要选择乘客、票种、座位类型即可。将这些信息定义在一个数组中,如果有几个乘客,就定义几个数组元素。passenger=['xxx']ticketType=['成人票']seatType=['硬座(¥28.5)']forindex,pinenumerate(passengers,1):self.driver.find_element_by_xpath("//label[text()='"+p+"']/preceding-sibling::input[1]").click()selectTicketType=Select(self.driver.find_element_by_id('ticketType_'+str(index)))selectTicketType.select_by_visible_text(ticketType[index-1])selectSeatType=Select(self.driver.find_element_by_id('seatType_'+str(index)))selectSeatType.select_by_visible_text(seatType[index-1])self.driver.find_element_by_id('submitOrder_id').click()self.driver.find_element_by_id('qr_submit_id').click()这里可以用手机支付火车票。综上所述,在两篇文章写完12306抢票软件后,大家只需要根据自己的需要稍微修改一下脚本,就可以在节假日抢票了。