最近嘗試了圖書館的研討間以後覺得實在是太香了,既可以滿足我的學習效率要求,又能讓我沒有一種被大家盯著的感覺,但是就是因為太香,所以特別難搶,我們設定晚上九點開搶,之前因為手速不太夠,沒搶到,所以想著寫個指令碼,直接一鍵搶,舒服
首先使用指令碼來實現搶座(暫且這麼稱呼),其實就是以自己組裝報文以欺騙瀏覽器以為是正常訪問操作,所幸python為我們提供了相關的庫
首先我們有乙個登入函式(實際上我推薦自己先登入著,這樣能簡單很多)我們其實可以開啟瀏覽器的開發者工具,在進行登入操作以後,可以在其中的network欄看到自己傳送的請求,點開紅色方框標記的請求報文,可以看到request headers,將其中的引數複製設定為自己的login_header
# 登入函式
deflogin
(user_id, passwd)
:"""
用來模擬使用者的登入行為,目前還無法自主識別驗證碼,需使用者自己登入
:param user_id: 使用者登入時的 id
:param passwd: 使用者登入時的 password
:return: 返回建立好的連線
"""login_header =
# 要登入的**
login_url =
'*********************'
# 建立session就是建立連線並保持,這樣cookie可以持續用
spider = requests.session(
) request = spider.get(url=login_url, headers=login_header)
# 返回登入成功的例項
return spider
然後我們將其中的cookie複製以後儲存好,這樣等會預訂的時候直接用。我們再在瀏覽器中預約個房間試試,並再次檢視此時的request headers,然後寫乙個預約函式模擬使用者的預約行為:
import json
# 預約函式
defsubscribe
(spider, start_time, end_time)
:"""
用來模擬使用者預約行為的函式
:param spider: 之前登入時建立的連線
:param start_time: 要預約的開始時間,格式為2000-01-01 08:30
:param end_time: 要預約的結束時間,格式為2000-01-01 12:30
:return: 返回的是預約結果
"""sub_header =
sub_params =
# 預約時的**
sub_url =
'******************xx'
request = spider.get(url=sub_url, headers=sub_header, params=sub_params)
print
(request.text)
response = json.loads(request.text)
msg = response[
'msg'
]if msg ==
'操作成功!'
:print
('success'
)return
1else
:print
('fail'
)return
2
然後就是我們的主函式
from datetime import datetime, date, timedelta
defmain()
:# 要登入的**
url =
"***************************"
begin_time1 =
'08:00'
end_time1 =
'12:00'
begin_time2 =
'14:00'
end_time2 =
'18:00'
# stu_id = input("請輸入您的學號:")
stu_id =
'******'
# stu_passwd = input("請輸入您的密碼:")
stu_passwd =
'******'
# 先獲取日期,我們是預約後天的
after_tomorrow = date.isoformat(date.today(
)+ timedelta(days=2)
)# 如果到點了就開始搶座
while
true
:if date.isoformat(date.today(
)+ timedelta(days=2)
)== after_tomorrow:
stu = login(stu_id, stu_passwd)
start_time1 = after_tomorrow +
' '+ begin_time1
start_time2 = after_tomorrow +
' '+ begin_time2
finish_time1 = after_tomorrow +
' '+ end_time1
finish_time2 = after_tomorrow +
' '+ end_time2
while
true
:print
('現在開始預約'
+str
(after_tomorrow)
+' '
+ begin_time1 +
'-'+ end_time1)
result1 = subscribe(stu, start_time1, finish_time1)
if result1 ==1:
# 第乙個時間段預約成功
print
('已經預約成功,請重新整理檢視'
)break
elif result1 ==2:
# 被預約,搶下乙個 room 的座位
room =
str(
int(room)-1
)continue
else
:continue
while
true
:print
('現在開始預約'
+str
(after_tomorrow)
+' '
+ begin_time2 +
'-'+ end_time2)
result1 = subscribe(stu, start_time2, finish_time2)
if result1 ==1:
# 第二個時間段預約成功
print
('已經預約成功,請重新整理檢視'
)break
elif result1 ==2:
# 被預約,搶下乙個 room 的座位
room =
str(
int(room)-1
)continue
else
:continue
else
:print
("還沒到時間呢。"
)return
if __name__ ==
"__main__"
: main(
)
當然了,在我琢磨這個指令碼怎麼寫的時候我是非常痛苦的,覺得為什麼不能給我乙份**直接執行呢?但是當我琢磨完了以後,我覺得,還是大家自己琢磨琢磨更好,而且教大家用指令碼去搶研討間多少也有點不太好。 python寫乙個服務 Python寫乙個服務
coding utf 8 import json from urllib.parse import parse qs from wsgiref.server import make server 定義函式,引數是函式的兩個引數,都是python本身定義的,預設就行了。定義檔案請求的型別和當前請求成功...
python寫乙個incaseformat檢測工具
1.13日爆發的incaseformat病毒會在對應的系統時間觸發攻擊行為,能在短時間內刪除除了系統盤之外的所有檔案。據研究人員稱該病毒會在1.23再次爆發,小r根據該病毒生成特點製作了乙個簡單的檢測工具。程式設計環境 python3.7 from tkinter import import os....
手把手教你寫乙個搶講座的指令碼
利用js指令碼來幫你搶到乙個表單提交型別的各種活動,這裡以講座為例 註冊乙個麥克表單 建立乙個自己的表單 首先自己提交乙個表單,同時開啟f12中的network,看一看自己提交的東西包含了什麼。比如這裡我們發現了d這個物件 之後我們嘗試著按照它這種格式,自己提交一下,看看能不能成功。這裡我選用了re...