Python编写自动化脚本(无验证码)
一、模擬登陸
打開登陸界面,F12,打開開發者工具(大部分瀏覽器都自帶),選擇Network,如果沒有顯示,就把該頁面刷新一下
我這里登陸的網站是 http://x.x.x.x/?q=custom_user_login
輸入賬號,密碼(這里我的密碼填寫的1,用做測試),原本很短的密碼卻變得很長,這里我們就有一個猜想,這里的password值在客戶端進行了加密,所以我們右鍵審查該password表單元素
由上圖可知這里果然進行了加密,于是我們把下圖中type="password"的password刪除,查看密碼明文,看看他究竟是怎么進行加密的
由上圖看出1被加密成了32位16進制數,并且根據上圖中的hex_md5,于是猜想他是md5加密,以hex(16進制)顯示,在 https://www.cmd5.com/ 進行驗證
由上圖可知,他果然是在前端進行了一次md5加密
隨后我們進行一次正確的登陸,獲取賬號密的變量名,如下圖:
現在開始編寫第一段代碼,登陸賬號:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author:1stPeakimport requests import hashlib import rerequest = requests.Session() #requests庫的session對象能夠幫我們跨請求保持某些參數,也會在同一個session實例發出的所有請求之間保持cookiesdef login(username,password):login_url = "http://x.x.x.x/?q=custom_user_login"md = hashlib.md5()md.update(password.encode('utf-8'))password = md.hexdigest()data = {"username": username,"password": password}try:req = request.post(login_url,data=data,headers=header)req.encoding = 'utf-8'#print(req.text) #這個用來測試是否登陸成功(查看登陸前與登錄后的源代碼有何差別)if "請輸入注冊時填寫的手機號" not in req.text:print("登陸成功")else:print("登錄失敗")except:print("未知錯誤")if __name__ == '__main__':username="你的用戶名"password="你的密碼"header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"}login(username,password)二、申請課程
-
打開burpsuite,開始抓包,再點擊報名學習
-
抓到下圖的POST請求(申請課程請求)
請求url為/?q=node/75827/people/apply
-
輸入url后打開
-
再打開 http://x.x.x.x/?q=node/75827, 檢驗是否申請成功
申請課程代碼段:
為了可以申請更多的課程,我們修改一下代碼:
def apply():for i in range(75926,75927):apply_url = "http://x.x.x.x/?q=node/"+str(i)+"/people/apply"try:req = request.get(apply_url,headers=header)if "success" in req.text:print(str(i)+"課程申請成功")return iexcept:print(str(i) + "申請失敗")三、刷課程
study = "http://x.x.x.x/?q=items/student/study/75926"try:req = request.get(study, headers=header)req.encoding = 'utf-8'G = r'<a score=".*?" uid=".*?" title=".*?" class="itemtitle" nid=".*?" module_id=".*?" item_id=".*?" href="/(.*?)">.*?</a>'study = re.findall(G,req.text)for study_url_last in study:study_url_all = "http://39.106.4.51/" + study_url_lasttry:request.get(study_url_all,headers=header,timeout=4)print(study_url_all+"刷課成功")except:print(study_url_all+"刷課失敗")except:pass為了可以刷更多的課程,我們來完善一下代碼:
def study():study_url = "http://x.x.x.x/?q=items/student/study/"+str(apply())try:req = request.get(study_url,headers=header)req.encoding='utf-8'G = r'<a score=".*?" uid=".*?" title=".*?" class="itemtitle" nid=".*?" module_id=".*?" item_id=".*?" href="/(.*?)">.*?</a>'study_url_list = re.findall(G,req.text,re.M|re.S)for study_url_last in study_url_list:study_url_all = "http://39.106.4.51/" + study_url_lasttry:req = request.get(study_url_all,headers=header,timeout=4)print(study_url_all+"學習完成")except:print(study_url_all+"學習失敗")except:pass四、完整代碼:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author:1stPeakimport requests import hashlib import rerequest = requests.Session() #requests庫的session對象能夠幫我們跨請求保持某些參數,也會在同一個session實例發出的所有請求之間保持cookiesdef login(username,password):login_url = "http://x.x.x.x/?q=custom_user_login"md = hashlib.md5()md.update(password.encode('utf-8'))password = md.hexdigest()data = {"username": username,"password": password}try:req = request.post(login_url,data=data,headers=header)req.encoding = 'utf-8'#print(req.text) #這個用來測試是否登陸成功(查看登陸前與登錄后的源代碼有何差別)if "請輸入注冊時填寫的手機號" not in req.text:print("登陸成功")else:print("登錄失敗")except:print("未知錯誤")def apply():for i in range(75926,75927):apply_url = "http://x.x.x.x/?q=node/"+str(i)+"/people/apply"try:req = request.get(apply_url,headers=header)if "success" in req.text:print(str(i)+"課程申請成功")return iexcept:print(str(i) + "申請失敗")def study():study_url = "http://x.x.x.x/?q=items/student/study/"+str(apply())try:req = request.get(study_url,headers=header)req.encoding = 'utf-8'G = r'<a score=".*?" uid=".*?" title=".*?" class="itemtitle" nid=".*?" module_id=".*?" item_id=".*?" href="/(.*?)">.*?</a>'study_url_list = re.findall(G,req.text,re.M|re.S)for study_url_last in study_url_list:study_url_all = "http://39.106.4.51/" + study_url_lasttry:request.get(study_url_all, headers=header, timeout=6)print(study_url_all + "學習完成")except:print(study_url_all + "學習失敗")except:passif __name__ == '__main__':username="你的用戶名"password="你的密碼"header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"}login(username,password)study() #運行study函數的時候會自動運行apply函數,所以不需要再寫apply()注:視頻文件無法刷成功,電腦自己看一遍還是不能完成任務點,不知其原因,如有知道或解決辦法,請評論留言,Thank you~
更新:此次文章僅供學習參考,不再更新。
其他圖片:
總結
以上是生活随笔為你收集整理的Python编写自动化脚本(无验证码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 武汉男人的特点
- 下一篇: Python3爬虫之中文乱码问题分析与解