python實現(xiàn)自動登錄12306自動搶票功能
一、遇到的問題?
1.url-正確的表頭:就是首先url不要寫錯了,然后一定要加正確的表頭,才可以拿到數(shù)據(jù),就是我 日期填寫錯誤,然后生成的url就有問題,浪費了好多時間。日期:2024-01-09 ,不要加兩個杠。
2.:注意用網(wǎng)頁顯示的user-agent:
3.拿到車票信息的json數(shù)據(jù)–代碼展示
import requests from prettytable import PrettyTable # 下面的模塊就是打開瀏覽器的操作模塊 from selenium import webdriver from selenium.webdriver.common.keys import Keys # 獲取瀏覽器的用戶數(shù)據(jù) # chrome ==> chrome://version/ # 個人資料路徑 C:\Users\hl\AppData\Local\Temp\scoped_dir18416_1206036739\Default # 路徑的Default要去掉 path = r'D:\game\chromedriver.exe' user_data_dir = r'C:\Users\hl\AppData\Local\Temp\scoped_dir18416_1206036739' from pypinyin import pinyin, Style import json import time """ 發(fā)送請求:模擬瀏覽器對于url地址發(fā)送請求 """ """根據(jù)用戶自行輸入相關信息,進行查票搜索""" # 讀取城市文件 f = open('city_all.json', encoding='utf-8').read() city_data = json.loads(f) print(city_data) # 輸入出發(fā)和目的城市 # 輸入時間 train_date = '2025-01-09' from_city = input('請輸出你出發(fā)的城市:') to_city = input('請輸出你要出行的城市:') print(city_data[from_city]) print(city_data[to_city]) headers = { 'user-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36', } # 請求網(wǎng)址 # https://kyfw.12306.cn/otn/leftTicket/queryG?leftTicketDTO.train_date=2025-01-06&leftTicketDTO.from_station=SZQ&leftTicketDTO.to_station=EFG&purpose_codes=ADULT url = f'https://kyfw.12306.cn/otn/leftTicket/queryG?leftTicketDTO.train_date={train_date}&leftTicketDTO.from_station={city_data[from_city]}&leftTicketDTO.to_station={city_data[to_city]}&purpose_codes=ADULT' # 發(fā)送請求 使用request response = requests.get(url=url, headers=headers) print(url) print(response.status_code) print(response.text) # 獲取數(shù)據(jù) json_data = response.json()
4. 12306的城市對應的代碼json文件,大家可以去網(wǎng)上找下,然后自己編程寫一下,我這個也花了一些時間鍛煉自己
4.對拿到的車次json數(shù)據(jù)進行可視化處理,也生成一個列表信息,代碼如下
import requests from prettytable import PrettyTable # 下面的模塊就是打開瀏覽器的操作模塊 from selenium import webdriver from selenium.webdriver.common.keys import Keys # 獲取瀏覽器的用戶數(shù)據(jù) # chrome ==> chrome://version/ # 個人資料路徑 C:\Users\hl\AppData\Local\Temp\scoped_dir18416_1206036739\Default # 路徑的Default要去掉 path = r'D:\game\chromedriver.exe' user_data_dir = r'C:\Users\hl\AppData\Local\Temp\scoped_dir18416_1206036739' from pypinyin import pinyin, Style import json import time """ 發(fā)送請求:模擬瀏覽器對于url地址發(fā)送請求 """ """根據(jù)用戶自行輸入相關信息,進行查票搜索""" # 讀取城市文件 f = open('city_all.json', encoding='utf-8').read() city_data = json.loads(f) print(city_data) # 輸入出發(fā)和目的城市 # 輸入時間 train_date = '2025-01-09' from_city = '深圳' to_city = '廣州' print(city_data[from_city]) print(city_data[to_city]) headers = { 'cookie':f'_uab_collina=173526990403562156621352; JSESSIONID=1B8F19FC6675BDA9782FEA7B06BDC256; route=9036359bb8a8a461c164a04f8f50b252; BIGipServerotn=1725497610.24610.0000; BIGipServerpassport=1005060362.50215.0000; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; _jc_save_fromStation=%u6DF1%u5733%2CSZQ; _jc_save_toStation=%u4FE1%u4E30%2CEFG; _jc_save_fromDate={train_date}; _jc_save_wfdc_flag=dc; _jc_save_toDate=2024-12-28', 'user-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36', } # 請求網(wǎng)址 # https://kyfw.12306.cn/otn/leftTicket/queryG?leftTicketDTO.train_date=2025-01-06&leftTicketDTO.from_station=SZQ&leftTicketDTO.to_station=EFG&purpose_codes=ADULT url = f'https://kyfw.12306.cn/otn/leftTicket/queryG?leftTicketDTO.train_date={train_date}&leftTicketDTO.from_station={city_data[from_city]}&leftTicketDTO.to_station={city_data[to_city]}&purpose_codes=ADULT' # 發(fā)送請求 使用request response = requests.get(url=url, headers=headers) print(url) print(response.status_code) print(response.text) # 獲取數(shù)據(jù) json_data = response.json() # 解析數(shù)據(jù)--字典取值: result = json_data['data']['result'] # 實例化對象 tb = PrettyTable() tb.field_names = [ '序號', '車次', '出發(fā)時間', '到達時間', '耗時', '特等座', '一等座', '二等座', '軟臥', '硬臥', '硬座', '無座', ] # 定義一個打印序號page page = 1 # for循環(huán)遍歷,提取列表里面的元素 for i in result: # 字符串分割,返回列表 index = i.split('|') # 通過列表索引位置取值 num = index[3] # 車次 star_time = index[8] # 出發(fā)時間 arrive_time = index[9] # 到達時間 use_time = index[10] # 耗時 special_class = index[32] # 特等座 frist_class = index[31] # 一等座 second_class = index[30] # 二等座 hard_sleeper = index[28] # 硬臥 hard_seat = index[29] # 硬座 no_seat = index[26] # 無座 soft_sleeper = index[23]# 軟臥 dict = { '序號':'page', '車次':'num', '出發(fā)時間':'star_time', '到達時間':'arrive_time', '耗時':'use_time', '特等座':'special_class', '一等座':'frist_class', '二等座':'second_class', '軟臥':'soft_sleeper', '硬臥':'hard_sleeper', '硬座':'hard_seat', '無座': 'no_seat' } tb.add_row([ page, #序號索引 num, # 車次 star_time,# 出發(fā)時間 arrive_time,# 到達時間 use_time, # 耗時 special_class, # 特等座 frist_class, # 一等座 second_class,# 二等座 soft_sleeper, # 軟臥 hard_sleeper,# 硬臥 hard_seat, # 硬座 no_seat,# 無座 ]) page += 1 print(tb)
5.程序進入到自動化代碼 – 自動登錄 --自動搶票,這里要注意有些操作一定要有時間等待,time.sleep(2)等,是不可以刪除的否則會報錯,因為操作太快,瀏覽器沒有反應過來。
def selenium_login(): # 0.配置谷歌瀏覽器加載項 options = webdriver.ChromeOptions() options.add_argument(f'--user-data-dir={user_data_dir}') # 添加瀏覽器數(shù)劇 # 1.將加載項配置到啟動瀏覽器中 打開/創(chuàng)建瀏覽器對象 driver = webdriver.Chrome(executable_path=r'D:\game\chromedriver.exe', options=options) # 2.輸入網(wǎng)址 driver.get('https://kyfw.12306.cn/otn/view/index.html') # 3.輸入賬號 -- > 找到賬號的輸入框 selenium 通過元素面板去定位元素 driver.find_element(by="css selector", value="#J-userName").send_keys(login['account']) # 4.輸入密碼 -- > 找到密碼的輸入框 driver.find_element(by="css selector", value="#J-password").send_keys(login['password']) # 5.點擊登錄按鈕 driver.find_element(by="css selector", value="#J-login").click() time.sleep(0.5) # 6.輸入身份證后4位 driver.find_element(by="css selector", value="#id_card").send_keys(login['id_card']) # 7.點擊獲取驗證碼 driver.find_element(by="css selector", value="#verification_code").click() # 8.輸入驗證碼 code = input("請輸入驗證碼:") driver.find_element(by="css selector", value="#code").send_keys(code) driver.find_element(by="css selector", value="#verification_code").click() # 9.點擊確認按鈕 driver.find_element(by="css selector", value="#sureClick").click() # 有時候報錯是需要延時等待 用 driver.implicitly_wait(10)代碼 可以實現(xiàn)加載完就就進行下一步, # 而time.sleep(5)則必須等我規(guī)定的時間 driver.implicitly_wait(5) # 10,點擊車票預定按鈕 driver.find_element(by="css selector", value="#link_for_ticket").click() # 11.1 選擇出發(fā)的城市--點擊那個框 driver.find_element(by="css selector", value="#fromStationText").click() # 11.2 選擇出發(fā)的城市--選擇城市 driver.find_element(by="css selector", value="#fromStationText").send_keys(from_city) # 11.3 選擇出發(fā)的城市--回車確定 driver.find_element(by="css selector", value="#fromStationText").send_keys(Keys.ENTER) # 12.1 選擇目的的城市--點擊那個框 driver.find_element(by="css selector", value="#toStationText").click() # 12.2 選擇目的的城市--選擇城市 driver.find_element(by="css selector", value="#toStationText").send_keys(to_city) # 12.3 選擇目的的城市--回車確定 driver.find_element(by="css selector", value="#toStationText").send_keys(Keys.ENTER) # 13.1 選擇出發(fā)的日期--點擊那個框 driver.find_element(by="css selector", value="#train_date").clear() # 12.2 選擇出發(fā)的日期--選擇城市 driver.find_element(by="css selector", value="#train_date").send_keys(train_date) # 12.3 選擇出發(fā)的日期--回車確定 driver.find_element(by="css selector", value="#train_date").send_keys(Keys.ENTER) # # 12.4 點擊--顯示全部可預訂的車次 # driver.find_element(by="css selector", value="avail_ticket").click() # 12.5 點擊查詢 driver.implicitly_wait(5) driver.find_element(by="css selector", value="#query_ticket").click() num = int(input('請輸入您想要的車次:')) # 點擊預訂按鈕 -- 選擇要預定的是第幾躺車 -- 這個代碼沒有問題 # driver.find_element(by="css selector", value='#ticket_65000G279007_01_03 > td.no-br').click() # //div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]/@id -- 但是selenium的find_elements不可以用@id找到元素。 ticket_list = driver.find_elements(by="xpath", value='//div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]') ticket_num = ticket_list[num].get_attribute("id") ticket_pre = ticket_num + ' > td.no-br' # 12.6 點擊想要車次的預定按鈕 driver.find_element(by="css selector", value=f"#{ticket_pre}").click() # 13.1 勾選想要的乘車人 driver.find_element(by="css selector", value='#normalPassenger_0').click() # 13.2 提交訂單 driver.find_element(by="css selector", value='#submitOrder_id').click() driver.implicitly_wait(5) # 13.3 選擇靠窗的1F的位置 # driver.find_element(by="css selector", value='#1F').click() --這種行不通,只能下方這種 driver.find_element(by="css selector", value='#erdeng1 > ul:nth-child(4) > li:nth-child(2)').click() # 13.4 再次確認提交 time.sleep(2) driver.find_element(by="css selector", value='#qr_submit_id').click() # driver.find_element(by="css selector", value='#qr_submit_id').click() # # 14. 網(wǎng)上支付 -- payButton # driver.find_element(by="css selector", value='#payButton').click() # # 15. 取消訂單 -- cancelButton # driver.find_element(by="css selector", value='#cancelButton').click()
至此,這個程序完全結(jié)束了。這也是最近春節(jié)要搶票我特意寫的。主要都是學習別人的代碼,但是有幾個改進是自己學了爬蟲,然后結(jié)合網(wǎng)頁的變化(很多程序是2021,2022的,現(xiàn)在12306的網(wǎng)頁有所改變),所寫的。
二、改進
1.xpath語法中@id 或者說可以@元素,但是selenium不可以要拆成兩部來寫。,而且新的selenium語法和前幾年的也有所區(qū)別。
# 點擊預訂按鈕 -- 選擇要預定的是第幾躺車 -- 這個代碼沒有問題 # driver.find_element(by="css selector", value='#ticket_65000G279007_01_03 > td.no-br').click() # //div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]/@id -- 但是selenium的find_elements不可以用@id找到元素。 ticket_list = driver.find_elements(by="xpath", value='//div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]') ticket_num = ticket_list[num].get_attribute("id") ticket_pre = ticket_num + ' > td.no-br'
2.預定按鈕的元素定位我沒有寫死可以自己定義,也就是可以自己選擇預定那躺車,比如1,3,4,11等,隨便選擇。因為這里是用了xpath語法去找到了所有的預訂按鈕。這個num你也可以放在login.json當中,這樣更方面搶票。login.json就是一個字典序列,我是將要填寫的東西都放進去。這樣不用手動填寫。
num = int(input('請輸入您想要的車次:')) # 點擊預訂按鈕 -- 選擇要預定的是第幾躺車 -- 這個代碼沒有問題 # driver.find_element(by="css selector", value='#ticket_65000G279007_01_03 > td.no-br').click() # //div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]/@id -- 但是selenium的find_elements不可以用@id找到元素。 ticket_list = driver.find_elements(by="xpath", value='//div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]') ticket_num = ticket_list[num].get_attribute("id") ticket_pre = ticket_num + ' > td.no-br'
login.json的內(nèi)容展示
3.源代碼完整展示
import requests from prettytable import PrettyTable # 下面的模塊就是打開瀏覽器的操作模塊 from selenium import webdriver from selenium.webdriver.common.keys import Keys # 獲取瀏覽器的用戶數(shù)據(jù) # chrome ==> chrome://version/ # 個人資料路徑 C:\Users\hl\AppData\Local\Temp\scoped_dir18416_1206036739\Default # 路徑的Default要去掉 path = r'D:\game\chromedriver.exe' user_data_dir = r'C:\Users\hl\AppData\Local\Temp\scoped_dir18416_1206036739' from pypinyin import pinyin, Style import json import time """ 發(fā)送請求:模擬瀏覽器對于url地址發(fā)送請求 """ """根據(jù)用戶自行輸入相關信息,進行查票搜索""" # 讀取城市文件 f = open('city_all.json', encoding='utf-8').read() city_data = json.loads(f) print(city_data) # 輸入出發(fā)和目的城市 # 輸入時間 train_date = '2025-01-09' from_city = '深圳' to_city = '廣州' print(city_data[from_city]) print(city_data[to_city]) headers = { 'cookie':f'_uab_collina=173526990403562156621352; JSESSIONID=1B8F19FC6675BDA9782FEA7B06BDC256; route=9036359bb8a8a461c164a04f8f50b252; BIGipServerotn=1725497610.24610.0000; BIGipServerpassport=1005060362.50215.0000; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; _jc_save_fromStation=%u6DF1%u5733%2CSZQ; _jc_save_toStation=%u4FE1%u4E30%2CEFG; _jc_save_fromDate={train_date}; _jc_save_wfdc_flag=dc; _jc_save_toDate=2024-12-28', 'user-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36', } # 請求網(wǎng)址 # https://kyfw.12306.cn/otn/leftTicket/queryG?leftTicketDTO.train_date=2025-01-06&leftTicketDTO.from_station=SZQ&leftTicketDTO.to_station=EFG&purpose_codes=ADULT url = f'https://kyfw.12306.cn/otn/leftTicket/queryG?leftTicketDTO.train_date={train_date}&leftTicketDTO.from_station={city_data[from_city]}&leftTicketDTO.to_station={city_data[to_city]}&purpose_codes=ADULT' # 發(fā)送請求 使用request response = requests.get(url=url, headers=headers) print(url) print(response.status_code) print(response.text) # 獲取數(shù)據(jù) json_data = response.json() # 解析數(shù)據(jù)--字典取值: result = json_data['data']['result'] def print_ticketlist(): # 實例化對象 tb = PrettyTable() tb.field_names = [ '序號', '車次', '出發(fā)時間', '到達時間', '耗時', '特等座', '一等座', '二等座', '軟臥', '硬臥', '硬座', '無座', ] # 定義一個打印序號page page = 1 # for循環(huán)遍歷,提取列表里面的元素 for i in result: # 字符串分割,返回列表 index = i.split('|') # 通過列表索引位置取值 num = index[3] # 車次 star_time = index[8] # 出發(fā)時間 arrive_time = index[9] # 到達時間 use_time = index[10] # 耗時 special_class = index[32] # 特等座 frist_class = index[31] # 一等座 second_class = index[30] # 二等座 hard_sleeper = index[28] # 硬臥 hard_seat = index[29] # 硬座 no_seat = index[26] # 無座 soft_sleeper = index[23]# 軟臥 dict = { '序號':'page', '車次':'num', '出發(fā)時間':'star_time', '到達時間':'arrive_time', '耗時':'use_time', '特等座':'special_class', '一等座':'frist_class', '二等座':'second_class', '軟臥':'soft_sleeper', '硬臥':'hard_sleeper', '硬座':'hard_seat', '無座': 'no_seat' } tb.add_row([ page, #序號索引 num, # 車次 star_time,# 出發(fā)時間 arrive_time,# 到達時間 use_time, # 耗時 special_class, # 特等座 frist_class, # 一等座 second_class,# 二等座 soft_sleeper, # 軟臥 hard_sleeper,# 硬臥 hard_seat, # 硬座 no_seat,# 無座 ]) page += 1 print(tb) # def change_chinese(chinese): # """把中文自動轉(zhuǎn)換為拼音""" # text = pinyin(chinese, style=Style.NORMAL) # string = ''.join(t[0] for t in text) # return string def selenium_login(): # 0.配置谷歌瀏覽器加載項 options = webdriver.ChromeOptions() options.add_argument(f'--user-data-dir={user_data_dir}') # 添加瀏覽器數(shù)劇 # 1.將加載項配置到啟動瀏覽器中 打開/創(chuàng)建瀏覽器對象 driver = webdriver.Chrome(executable_path=r'D:\game\chromedriver.exe', options=options) # 2.輸入網(wǎng)址 driver.get('https://kyfw.12306.cn/otn/view/index.html') # 3.輸入賬號 -- > 找到賬號的輸入框 selenium 通過元素面板去定位元素 driver.find_element(by="css selector", value="#J-userName").send_keys(login['account']) # 4.輸入密碼 -- > 找到密碼的輸入框 driver.find_element(by="css selector", value="#J-password").send_keys(login['password']) # 5.點擊登錄按鈕 driver.find_element(by="css selector", value="#J-login").click() time.sleep(0.5) # 6.輸入身份證后4位 driver.find_element(by="css selector", value="#id_card").send_keys(login['id_card']) # 7.點擊獲取驗證碼 driver.find_element(by="css selector", value="#verification_code").click() # 8.輸入驗證碼 code = input("請輸入驗證碼:") driver.find_element(by="css selector", value="#code").send_keys(code) driver.find_element(by="css selector", value="#verification_code").click() # 9.點擊確認按鈕 driver.find_element(by="css selector", value="#sureClick").click() # 有時候報錯是需要延時等待 用 driver.implicitly_wait(10)代碼 可以實現(xiàn)加載完就就進行下一步, # 而time.sleep(5)則必須等我規(guī)定的時間 driver.implicitly_wait(5) # 10,點擊車票預定按鈕 driver.find_element(by="css selector", value="#link_for_ticket").click() # 11.1 選擇出發(fā)的城市--點擊那個框 driver.find_element(by="css selector", value="#fromStationText").click() # 11.2 選擇出發(fā)的城市--選擇城市 driver.find_element(by="css selector", value="#fromStationText").send_keys(from_city) # 11.3 選擇出發(fā)的城市--回車確定 driver.find_element(by="css selector", value="#fromStationText").send_keys(Keys.ENTER) # 12.1 選擇目的的城市--點擊那個框 driver.find_element(by="css selector", value="#toStationText").click() # 12.2 選擇目的的城市--選擇城市 driver.find_element(by="css selector", value="#toStationText").send_keys(to_city) # 12.3 選擇目的的城市--回車確定 driver.find_element(by="css selector", value="#toStationText").send_keys(Keys.ENTER) # 13.1 選擇出發(fā)的日期--點擊那個框 driver.find_element(by="css selector", value="#train_date").clear() # 12.2 選擇出發(fā)的日期--選擇城市 driver.find_element(by="css selector", value="#train_date").send_keys(train_date) # 12.3 選擇出發(fā)的日期--回車確定 driver.find_element(by="css selector", value="#train_date").send_keys(Keys.ENTER) # # 12.4 點擊--顯示全部可預訂的車次 # driver.find_element(by="css selector", value="avail_ticket").click() # 12.5 點擊查詢 driver.implicitly_wait(5) driver.find_element(by="css selector", value="#query_ticket").click() num = int(input('請輸入您想要的車次:')) # 點擊預訂按鈕 -- 選擇要預定的是第幾躺車 -- 這個代碼沒有問題 # driver.find_element(by="css selector", value='#ticket_65000G279007_01_03 > td.no-br').click() # //div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]/@id -- 但是selenium的find_elements不可以用@id找到元素。 ticket_list = driver.find_elements(by="xpath", value='//div//tbody[@id="queryLeftTable"]/tr[contains(@id,"ticket")]') ticket_num = ticket_list[num].get_attribute("id") ticket_pre = ticket_num + ' > td.no-br' # 12.6 點擊想要車次的預定按鈕 driver.find_element(by="css selector", value=f"#{ticket_pre}").click() # 13.1 勾選想要的乘車人 driver.find_element(by="css selector", value='#normalPassenger_0').click() # 13.2 提交訂單 driver.find_element(by="css selector", value='#submitOrder_id').click() driver.implicitly_wait(5) # 13.3 選擇靠窗的1F的位置 # driver.find_element(by="css selector", value='#1F').click() --這種行不通,只能下方這種 driver.find_element(by="css selector", value='#erdeng1 > ul:nth-child(4) > li:nth-child(2)').click() # 13.4 再次確認提交 time.sleep(2) driver.find_element(by="css selector", value='#qr_submit_id').click() # driver.find_element(by="css selector", value='#qr_submit_id').click() # # 14. 網(wǎng)上支付 -- payButton # driver.find_element(by="css selector", value='#payButton').click() # # 15. 取消訂單 -- cancelButton # driver.find_element(by="css selector", value='#cancelButton').click() f = open('login.json', encoding='utf-8').read() login = json.loads(f) if __name__ == "__main__": print_ticketlist() selenium_login()
三、進階–展望
1.首先可以將自動化操作用try–except,這樣不會一直報錯,更為規(guī)范。
2.免登錄:因為登錄其實要驗證碼,這樣搶票也不方便。于是我就又繼續(xù)學習了一些,發(fā)現(xiàn)了兩種方法一是可以保存瀏覽器的數(shù)據(jù),因為selenium每次打開的是一個新的程序,但是我們可以通過設置參數(shù),讓他打開是有記憶的,但是沒有用。第二種,是cookie,是沒有什么問題的,目前已經(jīng)實現(xiàn),接下嘗試各種方法的cookie看行不行。后續(xù)我會發(fā)此程序。
3.多線程多進程:主要我已經(jīng)實現(xiàn)cookie免登錄,我想著是否可以打開多個頁面,然后多個賬號,一起搶他們所需要的票呢。
總結(jié)
1.最開始跟著寫這個程序只會照著抄,然后根本不懂,后面就是差了一點點成功,也不會找錯誤。
2.后面學習了一下爬蟲,更明白一點語法以及自己也更會如何定位元素了。還有就是request的一個請求,這些代碼也更看得懂了
3.想著結(jié)合多線程然后實現(xiàn)批量搶票,同時也希望代價的容錯率高,也就是說在自動化不用點幾下程序就不行了,讓它可以有更好的性能。
以上就是python實現(xiàn)自動登錄12306搶票功能的詳細內(nèi)容,更多關于python 12306搶票的資料請關注腳本之家其它相關文章!
相關文章
python教程之用py2exe將PY文件轉(zhuǎn)成EXE文件
py2exe是一個將python腳本轉(zhuǎn)換成windows上的可獨立執(zhí)行的可執(zhí)行程序(*.exe)的工具,這樣,你就可以不用裝python而在windows系統(tǒng)上運行這個可執(zhí)行程序。2014-06-06淺談Python采集網(wǎng)頁時正則表達式匹配換行符的問題
今天小編就為大家分享一篇淺談Python采集網(wǎng)頁時正則表達式匹配換行符的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12解決phantomjs截圖失敗,phantom.exit位置的問題
今天小編就為大家分享一篇解決phantomjs截圖失敗,phantom.exit位置的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python除法保留兩位小數(shù)點的三種方法實現(xiàn)
這篇文章主要給大家介紹了關于Python除法保留兩位小數(shù)點的三種方法實現(xiàn),在py應用中有許多拿結(jié)果中的多個整數(shù)進行運算,難免少不了除法(如單位換算等),但是整數(shù)進行運算后只會返回整數(shù),一般結(jié)果基本需要精確到后兩位,需要的朋友可以參考下2023-08-08關于pytorch中全連接神經(jīng)網(wǎng)絡搭建兩種模式詳解
今天小編就為大家分享一篇關于pytorch中全連接神經(jīng)網(wǎng)絡搭建兩種模式詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python實現(xiàn)刪除時保留特定文件夾和文件的示例
下面小編就為大家分享一篇Python實現(xiàn)刪除時保留特定文件夾和文件的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04python中的信號通信 blinker的使用小結(jié)
信號是一種通知或者說通信的方式,信號分為發(fā)送方和接收方,信號的特點就是發(fā)送端通知訂閱者發(fā)生了什么,今天通過本文給大家介紹python中的信號通信 blinker的相關知識,感興趣的朋友一起看看吧2021-10-10Python結(jié)合MySQL數(shù)據(jù)庫編寫簡單信息管理系統(tǒng)完整實例
最近Python課堂上布置了綜合實訓,實驗目標是設計一個信息管理系統(tǒng),下面這篇文章主要給大家介紹了關于Python結(jié)合MySQL數(shù)據(jù)庫編寫簡單信息管理系統(tǒng)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-06-06