欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實現(xiàn)自動登錄12306自動搶票功能

 更新時間:2025年01月08日 11:25:04   作者:重劍無鋒1024  
隨著互聯(lián)網(wǎng)技術的發(fā)展,越來越多的人選擇通過網(wǎng)絡平臺購票,特別是在中國,12306作為官方火車票預訂平臺,承擔了巨大的訪問量,對于熱門線路或者節(jié)假日出行,往往會出現(xiàn)一票難求的情況,因此,一些技術愛好者嘗試利用編程語言如Python來開發(fā)搶票腳本

一、遇到的問題?

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搶票的資料請關注腳本之家其它相關文章!

相關文章

最新評論