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-05
Python除法保留兩位小數(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-01
Python實現(xiàn)刪除時保留特定文件夾和文件的示例
下面小編就為大家分享一篇Python實現(xiàn)刪除時保留特定文件夾和文件的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
python中的信號通信 blinker的使用小結(jié)
信號是一種通知或者說通信的方式,信號分為發(fā)送方和接收方,信號的特點就是發(fā)送端通知訂閱者發(fā)生了什么,今天通過本文給大家介紹python中的信號通信 blinker的相關知識,感興趣的朋友一起看看吧2021-10-10
Python結(jié)合MySQL數(shù)據(jù)庫編寫簡單信息管理系統(tǒng)完整實例
最近Python課堂上布置了綜合實訓,實驗目標是設計一個信息管理系統(tǒng),下面這篇文章主要給大家介紹了關于Python結(jié)合MySQL數(shù)據(jù)庫編寫簡單信息管理系統(tǒng)的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-06-06

