Python3.x:搶票


Python3.x:搶票

一個妹子叫我幫她買動車票,結果竟然沒買到票;好吧,不好意思說買不到票,寫個搶票程序來完成吧;

1,Chromediver安裝:

因為需要chrome支持頁面測試,所以需要安裝chromedriver。安裝過程很簡單(實際上不需要安裝),注意下版本,有些低版本是不支持高版本的chrome的。鏡像鏈接:http://npm.taobao.org/mirrors/chromedriver 。直接把chromedriver.exe扔在在C/windows/system32/文件夾下的,這樣就不需要配置環境變量了。

注意:chromedriver要跟chrome匹配;

2,Splinter模塊安裝:

Splinter是一個自動化測試網絡應用的Python庫。有了Splinter,就可以將打開瀏覽器、輸入URL、填寫表單、點擊按鈕等全部操作自動化。

通過pip install splinter來安裝。

3,自動搶票,就是把每個操作步驟用代碼實現;代碼如下:

#python3.x

from splinter.browser import Browser
from time import sleep
# traceback模塊被用來跟蹤異常返回信息
import traceback
# 設定用戶名、密碼
username = u"用戶名"
passwd = u"密碼"
# 起始站點和乘車時間的cookies值要去找;
# 方法:先登錄一下12306,輸入地點日期什么的查詢一下,然后在chrome瀏覽器中按F12,出現如下頁面,在Application選項里找到相應的值。
# 表格中的cookie值:
#_jc_save_fromeStation的值為出發地
#_jc_save_toSatation的值為目的地
#_jc_save_fromDate 出發日期
#_jc_save_toDate返程日期
# 實例中用的是:福州 到 廈門北 2018-01-13
from_station = u"%u798F%u5DDE%2CFZS"
to_station = u"%u53A6%u95E8%u5317%2CXKS"
# 時間格式2018-01-25
from_date = u"2018-01-13"
# 車次,選擇第幾趟,0則從上之下依次點擊
order = 0
# 設定乘客姓名
ticketer = u"乘客姓名"
# 設定網址
ticket_url = "https://kyfw.12306.cn/otn/leftTicket/init"
login_url = "https://kyfw.12306.cn/otn/login/init"
initmy_url = "https://kyfw.12306.cn/otn/index/initMy12306"

# 登錄網站
def login():
    #點擊當前頁面的"登錄"
    bwr.find_by_text(u"登錄").click()
    sleep(3)
    #fill填充搜索框的內容,username。name=loginUserDTO.user_name的元素。
    bwr.fill("loginUserDTO.user_name", username)
    sleep(1)
    bwr.fill("userDTO.password", passwd)
    sleep(1)
    print(u"等待驗證碼,自行輸入...")
    #登錄手動輸入驗證碼,並登錄系統
    while True:
        #判斷當前的url是否已經進入系統
        if bwr.url != initmy_url:
            sleep(1)
        else:
            break
# 購票
def getTickt():
    global bwr
    # 使用splinter打開chrome瀏覽器
    bwr=Browser(driver_name="chrome")
    # splinter打開瀏覽器(返回購票頁面)
    bwr.visit(ticket_url)
    while bwr.is_text_present(u"登錄"):
        sleep(1)
        login()
        #判斷是否已經進入系統
        if bwr.url == initmy_url:
            break
    try:
        print(u"購票頁面...")
        # splinter打開瀏覽器(跳回購票頁面)
        bwr.visit(ticket_url)
        # 加載查詢信息
        bwr.cookies.add({"_jc_save_fromStation": from_station})
        bwr.cookies.add({"_jc_save_toStation": to_station})
        bwr.cookies.add({"_jc_save_fromDate": from_date})
        bwr.reload()
        sleep(2)
        count=0
        # 循環點擊預訂
        if order != 0:
            while bwr.url == ticket_url:
                bwr.find_by_text(u"查詢").click()
                count += 1
                print(u"循環點擊查詢... 第 %s 次" % count)
                sleep(1)
                try:
                    bwr.find_by_text(u"預訂")[order - 1].click()
                except:
                    print(u"還沒開始預訂")
                    continue
        else:
            while bwr.url == ticket_url:
                 bwr.find_by_text(u"查詢").click()
                 count += 1
                 print(u"循環點擊查詢... 第 %s 次" % count)
                 sleep(1)
                 try:
                     for i in bwr.find_by_text(u"預訂"):
                         i.click()
                         sleep(1)
                 except:
                     print(u"還沒開始預訂")
                     continue
        sleep(1)
        # 可以通過修改sleep的參數來調整延時, 但延時不要太低, 防止被12306網站認為是刷票屏蔽掉.
        bwr.find_by_text(ticketer)[0].click()
        sleep(1)
        bwr.find_by_text(u"提交訂單").click()
        sleep(1)
        #bwr.find_by_id(u"qr_submit_id").click()
        print(u"成功搶到一張寶貴的票")
    except Exception as e:
         print(traceback.print_exc())

if __name__ == "__main__":
    getTickt()

 

作者:整合俠
鏈接:http://www.cnblogs.com/lizm166/p/8191305.html
來源:博客園
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM