標籤:password 回呼函數 lin issues git 管理 script zip route
前言
最近用爬蟲爬豆瓣上的資料,無奈總是被封,agent偽裝和cookie修改這些都用過了,可惜都起不了什麼作用,到了一定次數,還是會返回403。想用代理ip,無奈免費的太不穩定,買收費的又有點沒必要。今天在查資料的時候,讀到一篇談ADSL撥號代理的文章,剛好我又是用這種方式上網,於是想到了一個對付豆瓣反爬蟲的辦法,當爬蟲檢測到被封的時候,斷開路由器串連,休眠一段時間之後繼續爬。
ps:我的路由器型號是TL-WR842N
一、思路1. 登陸路由器管理系統2. 通過抓包工具找到的操作的調用函數3. 調用函數
二、代碼及具體操作1. 具體代碼
#!/usr/bin/env python# -*- coding: utf-8 -*-# 用來斷開路由串連,目的是通過這個方法換ipimport requestsimport jsonimport sslimport timessl._create_default_https_context = ssl._create_unverified_contextdata = {"method":"do","login":{"password":"你加密後的密碼"} # 登陸後觀察獲得}# 根據自己的情況來填headers = {‘Host‘:‘192.168.0.1‘,‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36‘,‘Accept‘:‘application/json, text/javascript, */*; q=0.01‘,‘Accept-Encoding‘:‘gzip, deflate‘,‘Accept-Language‘:‘zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7,zh-TW;q=0.6‘,‘Connection‘:‘keep-alive‘,‘Content-Length‘:‘50‘,‘Content-Type‘:‘application/json; charset=UTF-8‘,‘Origin‘:‘http://192.168.0.1‘,‘Referer‘:‘http://192.168.0.1/‘,‘X-Requested-With‘:‘XMLHttpRequest‘}url = "http://192.168.0.1/"html = requests.post(url,json=data,headers=headers,verify = False)print(html.headers)stok = json.loads(html.text)["stok"]full_url = "http://192.168.0.1/stok="+ stok +"/ds"Disconnect = {"network":{"change_wan_status":{"proto":"pppoe","operate":"disconnect"}},"method":"do"} # 通過觀察獲得disconn_route = requests.post(url=full_url, json=Disconnect).json()print(disconn_route)
2. 獲得登陸後加密的密碼
進入你的路由器管理頁,我的是http://192.168.0.1/,開啟瀏覽器的抓包介面,我的是chrome,直接f12就行了,然後輸入密碼登入。
開啟Network選項卡,找到第一個名為192.168.0.1的檔案,在右側找到Request Payload部分,在這裡可以找到你登入時加密後的密碼,實際上直接點view source,然後把內容拷貝到代碼裡就行了。
3. 獲得headers
也是在剛才那個檔案找到Request Headers然後把內容拷貝過去。
4. 獲得相應的函數調用資訊
譬如我想中斷連線,於是進入路由設定→上網設定介面,通過Element找到按鈕的html元素,最後找到它回呼函數檔案:
點進去檔案後找到.action操作,這就是中斷連線需要調用的函數了。
5. 運行代碼並觀察輸出
填好這些資訊之後,運行代碼並觀察結果。如果調用成功,則列印:{u‘error_code‘: 0}
這就是TL-WR842N的路由器控制指令碼,型號不同的則不一定適用。
三、參考
1. 使用xx-net後 不能用python重啟路由 #10283
用python控制你的路由器