自動買票工具 python-splinter
阿新 • • 發佈:2018-12-30
今天又沒買到回家的火車票......
我表示很鬧心,最近正好在研究知乎助手的那個小爬蟲,看到了splinter這個庫,這個庫主要運用於前端測試的小工具,但是也可以和爬蟲結合起來進行一些資訊抓取的工作.
其實原理很簡單就是找到相應按鈕的id然後呼叫點選函式,在你想填入文字的edit框中新增相應的內容就ok了,只不過不需要你手動去點,現在這個程式碼其實還可以優化,比如說可以將所有車次加入到一個字典中,之後你就直接輸入車次就ok了,不用現在還得查車次的順序和位置.
驗證碼這一塊還是沒有好的解決辦法,也沒有相應的開源庫,只能手動驗證或者連結打碼兔的api都可以.
執行下方程式碼得手動輸入一下賬號和密碼,還得登入12306找一下自己地點的cookies,方法很簡單就是進入12306買票介面,輸入完地點之後,找到cookies這個單詞,點開之後裡面會有_jc_save_開頭的幾個屬性,記錄一下就OK.
from splinter.browser import Browser from time import sleep username = "" password = "" start = "%u5317%u4EAC%2CBJP"#北京 end = "%u6C88%u9633%2CSYT"#瀋陽 time = "2016-01-23" order = 1#預訂第一個車次,如果為0則預訂離現在時間最近有票的車次 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 qiangpiao(): global b b = Browser() b.visit(ticket_url) while b.is_text_present(u"登入"): sleep(1) b.find_by_text(u"登入").click() sleep(3) b.fill("loginUserDTO.user_name",username) sleep(1) b.fill("userDTO.password",password) sleep(1) print "等待驗證碼,自行輸入..." sleep(10) if b.url == initmy_url: break try: b.visit(ticket_url) b.cookies.add({"_jc_save_fromDate":time}) b.cookies.add({"_jc_save_fromStation":start}) b.cookies.add({"_jc_save_toStation":end}) b.reload() b.find_by_text(u"查詢").click() if order != 0: while b.url == ticket_url: b.find_by_text(u"預訂")[order-1].click() b.find_by_text(u"鄧京東").click() else: while b.url == ticket_url: for i in b.find_by_text(u"預訂"): i.click() b.find_by_text(u"鄧京東").click() print "等待驗證碼,自行輸入..." except Exception as e: print str(e) if __name__ == "__main__": qiangpiao()