本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取
这个是实现结果,因为一天只能取消三次,所以最后一步点击确认被我注释了
1.首先实现使用selenium登陆12306
这里实现了使用selenium登陆12306,实现全自动登陆12306链接
2.根据上面实现登陆后,实现购买火车票还需两步
这里只进行了二等座的查询和购票,想要买其他的自己也可以进行修改 1.进行车票的查询 这里面需要注意的是在输入目的地和起始地时需要先click一下文本框browser.find_element_by_id(‘fromStationText’).click() 不然输入的地址无效 还有将日期的只读属性去掉
def search_railway_ticket(fromstation,tostation,train_date):
# 火车票页面查询url
search_url = 'https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc'
# 转到查询车次页面
browser.get(search_url)
time.sleep(2)
#输入出发地
WebDriverWait(browser, 1000).until(
EC.presence_of_element_located((By.ID, 'fromStationText'))
)
#先点击一下
browser.find_element_by_id('fromStationText').click()
browser.find_element_by_id('fromStationText').send_keys(fromstation)
browser.find_element_by_id('fromStationText').send_keys(Keys.ENTER)
time.sleep(1)
WebDriverWait(browser, 1000).until(
EC.presence_of_element_located((By.ID, 'toStationText'))
)
#输入目的地
browser.find_element_by_id('toStationText').click()
browser.find_element_by_id('toStationText').send_keys(tostation)
browser.find_element_by_id('toStationText').send_keys(Keys.ENTER)
time.sleep(5)
#将日期的只读属性去掉
js = 'document.getElementById("train_date").removeAttribute("readonly")'
browser.execute_script(js)
#去掉原本的时间
WebDriverWait(browser, 1000).until(
EC.presence_of_element_located((By.ID, 'train_date'))
)
browser.find_element_by_id("train_date").clear()
#输入出发时间
browser.find_element_by_id('train_date').send_keys(train_date)
# 等待查询按钮是否可用
WebDriverWait(browser, 1000).until(
EC.element_to_be_clickable((By.ID, 'query_ticket'))
)
searBtn = browser.find_element_by_id('query_ticket')
searBtn.click()
print('点击按钮')
2.购买火车票 在这个函数中需要注意的是最好把最后一步注释掉 browser.find_element_by_id(‘qr_submit_id’).click() 因为一天只能取消3次订单
def buy_ticket(fromstation,tostation,train_date,train_number,passenger):
#查询火车票
search_railway_ticket(fromstation,tostation,train_date)
time.sleep(5)
#获取每一个车次的信息
tr_list = browser.find_elem