国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python + selenium + requests實現12306全自動搶票及驗證碼破解加自動點

2020-02-15 23:46:42
字體:
來源:轉載
供稿:網友

測試結果: 

整個買票流程可以再快一點,不過為了穩定起見,有些地方等待了一些時間

完整程序,拿去可用

整個程序分了三個模塊:購票模塊(主體)、驗證碼識別模塊、余票查詢模塊

購票模塊:

from selenium import webdriverfrom selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException, ElementNotVisibleExceptionimport timeimport requestsfrom urllib.parse import urlencodefrom pyquery import PyQuery as pqfrom check_ticket import Checkfrom verify import Codeimport jsonclass Buy_Ticket():  def __init__(self, start_station, end_station, date, username, password, purpose):    self.num = 1    self.start = start_station    self.end = end_station    self.date = date    self.username = username    self.password = password    self.purpose = purpose    self.login_url = 'https://kyfw.12306.cn/otn/login/init'    self.ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init'  def login(self):    browser.get(self.login_url)    try:      input_name = browser.find_element_by_id('username')      input_pd = browser.find_element_by_id('password')      button = browser.find_element_by_id('loginSub')      time.sleep(1)      input_name.send_keys(self.username)      input_pd.send_keys(self.password)      c = Code(browser)    #調用驗證碼識別模塊      c.main()      button.click()      time.sleep(2)      #等待頁面跳轉,如果驗證碼識別錯誤,就執行下面的while語句      while browser.current_url == self.login_url + '#':        c = Code(browser)        c.main()        button.click()        time.sleep(2)      #self.get_passenger()      self.check()    except NoSuchElementException:      self.login()  def check(self):    #調用余票查詢模塊    check = Check(self.date, self.start, self.end, self.purpose)    start_end = check.look_up_station()    self.num = check.get_info()    #cookie的添加,json.dumps把以漢字形式呈現的起始、終點站轉化成unicode編碼,可在審查元素里查看cookie    browser.add_cookie({'name':'_jc_save_fromStation', 'value':json.dumps(self.start).strip('"').replace('//', '%') + '%2C' + start_end[0]})    browser.add_cookie({'name':'_jc_save_toStation', 'value':json.dumps(self.end).strip('"').replace('//', '%') + '%2C' + start_end[1]})    browser.add_cookie({'name':'_jc_save_fromDate', 'value':self.date})    browser.get(self.ticket_url)    if self.purpose == '學生':      btn = browser.find_element_by_id('sf2')      time.sleep(1)      btn.click()    button = browser.find_element_by_id('query_ticket')    time.sleep(1)    button.click()  def book_ticket(self):    print('開始預訂車票...')    #先查找出所有車次對應的預訂按鈕,再根據余票查詢模塊返回的車次序號,點擊相應的預訂按鈕    button = browser.find_elements_by_class_name('btn72')    button[self.num-1].click()    time.sleep(3)    button2 = browser.find_element_by_id('normalPassenger_0') #按實際情況,可自行修改,這里就選擇的第一個常用聯系人,                                  #第二個是normalPassenger_1,依此類推    button2.click()    button3 = browser.find_element_by_id('submitOrder_id')    time.sleep(1)    button3.click()    time.sleep(3) #等待頁面加載完畢,不然后面可能會報錯,等待時間自行決定    try:      button4 = browser.find_element_by_id('qr_submit_id')      button4.click()    except ElementNotVisibleException:      button4 = browser.find_element_by_id('qr_submit_id')      button4.click()    print('車票預定成功!請在30分鐘內完成付款!')  def main(self):    self.login()    self.book_ticket()if __name__ == '__main__':  begin = time.time()  browser = webdriver.Chrome()  b = Buy_Ticket('上海', '重慶', '2018-09-18', '賬號', '密碼', 'ADULT') #賬號、密碼自行修改  b.main()  end = time.time()  print('總耗時:%d秒' % int(end-begin))  #browser.close()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上杭县| 东兴市| 黄骅市| 政和县| 汕头市| 赫章县| 进贤县| 新源县| 安庆市| 贺州市| 承德市| 张掖市| 沿河| 城市| 吉隆县| 仁怀市| 冕宁县| 巴塘县| 松溪县| 华亭县| 广州市| 巴里| 临江市| 吉林市| 绵阳市| 南汇区| 泸定县| 明星| 华安县| 桃源县| 黎平县| 元朗区| 扎鲁特旗| 堆龙德庆县| 南皮县| 通海县| 文水县| 高要市| 和平区| 杭州市| 屯昌县|