import time
from selenium import webdriver
from selenium.common import ElementNotVisibleException, ElementNotInteractableException
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
# 不让程序检测是驱动控制
def login(number,time1, from_station, to_station):
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.12306.cn/index/')
driver.find_element(by=By.ID, value='J-btn-login').click()
driver.find_element(by=By.ID, value='J-userName').send_keys('')
driver.find_element(by=By.ID, value='J-password').send_keys('')
driver.find_element(by=By.ID, value='J-login').click()
script = 'Object.defineProperty(navigator,"webdriver",{get:()=>undefined,});'
driver.execute_script(script)
time.sleep(5)
# 点击确定按钮
btn = driver.find_element('css selector', 'div.modal-ft>a')
btn.click()
driver.find_element(by=By.ID, value='link_for_ticket').click()
# 点击确定
btn1 = driver.find_element(by=By.XPATH, value='//*[@id="qd_closeDefaultWarningWindowDialog_id"]')
btn1.click()
driver.find_element(by=By.XPATH, value='//*[@id="fromStationText"]').click()
driver.find_element(by=By.XPATH, value='//*[@id="fromStationText"]').clear()
driver.find_element(by=By.XPATH, value='//*[@id="fromStationText"]').send_keys(from_station)
driver.find_element(by=By.XPATH, value='//*[@id="fromStationText"]').send_keys(Keys.ENTER)
time.sleep(1)
driver.find_element(by=By.XPATH, value='//*[@id="toStationText"]').send_keys(Keys.ENTER)
driver.find_element(by=By.XPATH, value='//*[@id="toStationText"]').click()
time.sleep(1)
driver.find_element(by=By.XPATH, value='//*[@id="toStationText"]').send_keys(to_station)
driver.find_element(by=By.XPATH, value='//*[@id="toStationText"]').click()
time.sleep(1)
driver.find_element(by=By.XPATH, value='//*[@id="toStationText"]').send_keys(to_station)
driver.find_element(by=By.XPATH, value='//*[@id="toStationText"]').send_keys(Keys.ENTER)
driver.find_element(by=By.XPATH, value='//*[@id="train_date"]').clear()
driver.find_element(by=By.XPATH, value='//*[@id="train_date"]').send_keys(time1)
# 点击查询
driver.find_element(by=By.XPATH, value='//*[@id="query_ticket"]').click()
time.sleep(3)
#预定,选车
driver.find_element(by=By.XPATH,value=number).click()
time.sleep(1)
#选人
driver.find_element(by=By.XPATH,value='//*[@id="normalPassenger_0"]').click()
# 确认购票提交订单
time.sleep(2)
sumit_button =driver.find_element(by=By.XPATH, value='//*[@id="submitOrder_id"]')
try:
while sumit_button:
try:
sumit_button.click()
sumit_button = driver.find_element(by=By.XPATH, value='//*[@id="submitOrder_id"]')
except(ElementNotVisibleException, ElementNotInteractableException):
break
print('抢票成功,请去确认')
except:
pass
# 选座
time.sleep(1)
def wait(locator, timeout=10):
'''等到元素加载完成'''
WebDriverWait(driver, timeout).until(EC.presence_of_element_located(locator))
locator=(By.XPATH,'//*[@id="1F"]')
wait(locator)
elements = driver.find_element(by=By.XPATH,value='//*[@id="1F"]') # 再次获取元素,预防StaleElementReferenceException
driver.execute_script('arguments[0].click();', elements) # 模拟用户点击
#再次确认
double_check=driver.find_element(by=By.XPATH,value='//*[@id="qr_submit_id"]')
try:
while sumit_button:
try:
double_check.click()
double_check = driver.find_element(by=By.XPATH,value='//*[@id="qr_submit_id"]')
except(ElementNotVisibleException, ElementNotInteractableException):
break
print('抢票成功,请去支付')
except:
pass
# 网上支付
time.sleep(2)
#driver.find_element(by=By.XPATH, value='//*[@id="payButton"]').click()
# 不关闭浏览器
input("t")
#密码账号填自己的