一百多行python代碼實(shí)現(xiàn)搶票助手
一. 代碼使用Python+Splinter開發(fā),Splinter是一個(gè)使用Python開發(fā)的開源Web應(yīng)用測(cè)試工具,它可以幫你實(shí)現(xiàn)自動(dòng)瀏覽站點(diǎn)和與其進(jìn)行交互。
二. 安裝好Python 3或2都可以,然后安裝Splinter `pip install Splinter
三. Splinter注意事項(xiàng)
1. Splinter的Browser類默認(rèn)優(yōu)先使用firefox,所以用chrome的話,需要指定driver_name="chrome",只要養(yǎng)成一個(gè)習(xí)慣,不管用什么瀏覽器都指定,問題會(huì)出得少
2. 當(dāng)然,選擇chrome的話,需要查看自己瀏覽器的版本,需要和chromedriver版本對(duì)應(yīng)(不是版本號(hào)一致),參考和下載地址
四. Splinter.broser部分方法介紹
1. findbyid("控件id").first:根據(jù)id找到組件
2. visis(url):訪問指定網(wǎng)址
3. fill("填充的內(nèi)容"):用指定內(nèi)容填充組件
4. click():點(diǎn)擊事件
5. reload():重新加載當(dāng)前文檔
五. 主要思路:
1. 自動(dòng)填充用戶名,密碼,點(diǎn)擊圖片驗(yàn)證碼(手動(dòng)),自動(dòng)點(diǎn)擊購票查詢,預(yù)訂,自動(dòng)選擇指定乘客進(jìn)入提交訂單頁面
2. 除登錄時(shí)的圖片驗(yàn)證碼,全程自動(dòng)
六. error(下面是我已經(jīng)嘗試成功的):
1. OSError: [WinError 193] %1 不是有效的 Win32 應(yīng)用程序。
2. 解決方案:chromedriver版本和電腦瀏覽器版本映射沒對(duì)應(yīng)
3. ImportError: cannot import name 'Browser'。
4. 解決方案:是否安裝了Splinter `pip install Splinter`,將代碼文件和chromedriver放到一個(gè)新文件夾下,防止其他文件的影響
5. 請(qǐng)?jiān)谶\(yùn)行文件前,將代碼內(nèi)的乘客,用戶名,密碼正確填寫好,檢查cookies是否正確
七. cookies 查看
1. 進(jìn)入chrome瀏覽器,按F12,選中NetWork選項(xiàng),如下圖
2. 起始地址:`_jc_save_fromStation` 購票時(shí)間:`_jc_save_fromDate` 目的地:`_jc_save_toStation`
八. 運(yùn)行方法
1. python trainticket.py 天津 南昌 2018-02-10
2. OK
九. 具體代碼如下
# -*- coding:utf-8 -*-
"""
@author Jianxiong Rao
"""
from splinter.browser import Browser
from time import sleep
import traceback
import time,sys
import os
class HuoChe(object):
"""docstring for Train"""
driver_name=''
executable_path=''
#用戶名 密碼
username = u"12306帳戶名"
passwd = u"12306密碼"
#cookies值自己找
# 天津%u5929%u6D25%2CTJP 南昌%u5357%u660C%2CNCG 桂林%u6842%u6797%2CGLZ
starts = u"%u5929%u6D25%2CTJP"
ends = u"%u5357%u660C%2CNCG"
#時(shí)間格式2018-02-05
dtime = u"2018-02-05"
#車次,選擇第幾趟,0則從上之下依次點(diǎn)擊
order = 0
###乘客姓名
users=[u'乘客名']
##席位
xb=u"二等座"
pz=u"成人票"
"""網(wǎng)址"""
#12306查詢URL
ticket_url = "https://kyfw.12306.cn/otn/leftTicket/init"
#12306登錄URL
login_url = "https://kyfw.12306.cn/otn/login/init"
#我的12306URL
initmy_url = "https://kyfw.12306.cn/otn/index/initMy12306"
#購票URL
buy="https://kyfw.12306.cn/otn/confirmPassenger/initDc"
login_url='https://kyfw.12306.cn/otn/login/init'
def __init__(self):
self.driver_name = 'chrome'
self.executable_path = os.getcwd()+'/chromedriver'
print("Welcome To Use The Tool")
def login(self):
self.driver.visit(self.login_url)
#填充密碼
self.driver.fill("loginUserDTO.user_name",self.username)
#sleep(1)
self.driver.fill("userDTO.password",self.passwd)
print("等待驗(yàn)證碼,自行輸入....")
while True:
if self.driver.url != self.initmy_url:
sleep(1)
else :
break
def start(self):
self.driver = Browser(driver_name=self.driver_name,executable_path = self.executable_path)
self.driver.driver.set_window_size(1400,1000)
self.login()
#sleep(1)
self.driver.visit(self.ticket_url)
try:
print("購票頁面開始....")
#sleep(1)
#加載查詢信息
self.driver.cookies.add({"_jc_save_fromStation":self.starts})
self.driver.cookies.add({"_jc_save_toStation":self.ends})
self.driver.cookies.add({"_jc_save_fromDate":self.dtime})
self.driver.reload()
count = 0
if self.order != 0:
while self.driver.url == self.ticket_url:
self.driver.find_bytext(u"查詢").click()
count += 1
print("循環(huán)點(diǎn)擊查詢.... 第 %s 次"%count)
#sleep(1)
try:
self.driver.find_by_text(u'預(yù)訂')[self.order - 1].click()
except Exception as e:
print(e)
print("還沒開始預(yù)訂")
continue
else :
while self.driver.url == self.ticket_url:
self.driver.find_by_text(u"查詢").click()
count += 1
print("循環(huán)點(diǎn)擊查詢.... 第 %s 次"%count)
#sleep(0.8)
try:
for i in self.driver.find_by_text(u"預(yù)訂"):
i.click()
sleep(1)
except Exception as e:
print(e)
print("還沒開始預(yù)訂 %s "%count)
continue
print("開始預(yù)訂....")
#sleep(1)
#self.driver.reload()
sleep(1)
print("開始選擇用戶....")
for user in self.users:
self.driver.find_by_text(user).last.click()
print("提交訂單....")
sleep(1)
# self.driver.find_by_text(self.pz).click()
# self.driver.find_by_id('').select(self.pz)
# sleep(1)
# self.driver.find_by_text(self.xb).click()
# sleep(1)
self.driver.find_by_id('submitOrder_id').click()
print("開始選座...")
# self.driver.find_by_id('1D').last.click()
# self.driver.find_by_id('1F').last.click()
sleep(1.5)
print("確認(rèn)選座....")
self.driver.find_by_text('qr_submit_id').click()
except Exception as e:
print(e)
cities={
'天津':'%u5929%u6D25%2CTJP',
'南昌':'%u5357%u660C%2CNCG',
'桂林':'%u6842%u6797%2CGLZ'
}
if __name__=="__main__":
train = HuoChe()
train.starts = cities[sys.argv[1]]
train.ends = cities[sys.argv[2]]
train.dtime = sys.argv[3]
train.start()
十. 源碼地址
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 教你用Python來制作一個(gè)自動(dòng)搶票的腳本小程序
- 基于Python實(shí)現(xiàn)火車票搶票軟件
- 一款開源的Python一鍵搶票神器詳細(xì)配置
- python爬蟲實(shí)現(xiàn)最新12306搶票
- python3顯式變量類型typing的實(shí)現(xiàn)
- Python爬蟲 12306搶票開源代碼過程詳解
- python并發(fā)編程多進(jìn)程 模擬搶票實(shí)現(xiàn)過程
- Python實(shí)現(xiàn)12306火車票搶票系統(tǒng)
- python+splinter自動(dòng)刷新?lián)屍惫δ?/a>
- python+Splinter實(shí)現(xiàn)12306搶票功能
- Python編寫一個(gè)多線程的12306搶票程序的示例
相關(guān)文章
已安裝Pytorch卻提示no?moudle?named?'torch'(沒有名稱為torch
這篇文章主要給大家介紹了關(guān)于已安裝Pytorch卻提示no?moudle?named?'torch'(沒有名稱為torch的模塊)的相關(guān)資料,當(dāng)提示"No module named 'torch'"時(shí),可能是由于安裝的Pytorch版本與當(dāng)前環(huán)境不匹配導(dǎo)致的,需要的朋友可以參考下2023-11-11
基于python實(shí)現(xiàn)MQTT發(fā)布訂閱過程原理解析
這篇文章主要介紹了基于python實(shí)現(xiàn)MQTT發(fā)布訂閱過程原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Python實(shí)現(xiàn)24點(diǎn)小游戲
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)24點(diǎn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
python通過nmap掃描在線設(shè)備并嘗試AAA登錄(實(shí)例代碼)
這篇文章主要介紹了python通過nmap掃描在線設(shè)備并嘗試AAA登錄,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
Python實(shí)現(xiàn)修改文件內(nèi)容的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)修改文件內(nèi)容的方法,結(jié)合實(shí)例形式分析了Python文件讀寫、字符串替換及shell方法調(diào)用等相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
一文讓你秒懂精通pip并快速體驗(yàn)深度學(xué)習(xí)應(yīng)用【建議收藏】
在使用python的時(shí)候,經(jīng)常使用到pip這個(gè)工具,可以很方便的線上安裝依賴庫,當(dāng)然pip還有很多參數(shù)都可以幫我們?nèi)ゲ樵円恍煨畔?這篇文章主要給大家介紹了如何通過一篇文章讓你秒懂精通pip并快速體驗(yàn)深度學(xué)習(xí)應(yīng)用的相關(guān)資料,需要的朋友可以參考下2021-08-08
分享5個(gè)方便好用的Python自動(dòng)化腳本
這篇文章主要介紹了分享5個(gè)方便好用的Python自動(dòng)化腳本,這次我們使用Python來實(shí)現(xiàn)幾個(gè)自動(dòng)化場(chǎng)景,或許可以用到你的工作中或者對(duì)你的學(xué)習(xí)有所幫助,需要的朋友可以參考一下2022-03-03

