12306火车票余票自动查询 Python selenium
废话不多说,直接上代码
import json
import time
from captcha import *
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import wait
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions as EC
try:
options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
browser = webdriver.Chrome(options=options)
browser.maximize_window()
url = 'https://www.12306.cn/index/index.html'
browser.get(url)
except:
print("12306打开失败!")
browser.close()
browser.find_element_by_xpath('//*[@id="J-chepiao"]/a').click()
browser.find_element_by_xpath('//*[@id="megamenu-3"]/div[1]/ul/li[1]/a').click()
try:
browser.find_element_by_xpath('//*[@id="qd_closeDefaultWarningWindowDialog_id"]').click()
except:
pass
def input_info():
print('=====开始查询=====')
from_station = browser.find_element_by_id("fromStationText")
from_station.click()
from_station.send_keys(start_station)
from_station.send_keys(Keys.ENTER)
time.sleep(0.5)
to_station = browser.find_element_by_id("toStationText")
to_station.click()
to_station.send_keys(end_station)
to_station.send_keys(Keys.ENTER)
time.sleep(0.5)
js = "document.getElementById('train_date').removeAttribute('readonly')"
browser.execute_script(js)
start_date = browser.find_element_by_id("train_date")
start_date.clear()
start_date.send_keys(date)
start_date.click()
time.sleep(0.5)
query_ticket_tag = browser.find_element_by_id('query_ticket')
query_ticket_tag.click()
def buy_ticket():
trList = browser.find_elements_by_xpath(".//tbody[@id='queryLeftTable']/tr[not(@datatran)]")
for tr in trList:
trainNum = tr.find_element_by_class_name("number").text
if trainNum in trains:
leftTicket = tr.find_element_by_xpath(".//td[4]").text
print('leftTicket', leftTicket)
if leftTicket == '有' or leftTicket.isdigit():
orderBtn = tr.find_element_by_class_name("btn72")
orderBtn.click()
browser.implicitly_wait(5)
passengerLabels = browser.find_elements_by_xpath(".//ul[@id='normal_passenger_id']/li/label")
for passengerLabel in passengerLabels:
name = passengerLabel.text
if name in names:
passengerLabel.click()
browser.implicitly_wait(20)
submitBtn = browser.find_element_by_id("submitOrder_id")
submitBtn.click()
browser.implicitly_wait(20)
confirmBtn = browser.find_element_by_id("qr_submit_id")
confirmBtn.click()
time.sleep(2)
browser.implicitly_wait(20)
confirmBtn = browser.find_element_by_id("qr_submit_id")
confirmBtn.click()
break
elif leftTicket == '候补':
print("目前只有候补车票!")
if __name__ == '__main__':
purpose = 'ADULT'
date = '2022-01-29'
start_station = '合肥南'
end_station = '十堰东'
trains = ['G3231']
input_info()
time.sleep(0.5)
buy_ticket()