GO+Selenium批量關注各大網站實戰 3 (開發者頭條號)
阿新 • • 發佈:2019-02-18
這次實戰的網站是開發者頭條。
主要實現的功能有3個, 批量關注好友,批量收藏文章,批量訂閱獨家號。
先看關注好友:
網站使用者的個人主頁:
可以看出,地址路由採用的是最後的id遞增。(這在網站開發中很普遍,我猜想這個id也正是他們資料庫中的id)。
這樣的路由有個致命弱點,通過for迴圈,直接就能從頭掃到尾。
接下來分析,點選關注後,網路請求:
所以直接拼湊出最簡單的ajax:
$.ajax({ cache: false, async: false, type: 'POST', url: '/u/xxxx/follow', success: function (data, status) { ret= "ok"; } });
最終golang+selenium程式碼,(登入等基礎程式碼略過,和前兩篇文章的程式碼類似)
//關注最新的使用者 func FollowNewUser(wd *webApi.WebDriver, uid int) { for { time.Sleep(time.Second*50) beelog.Debug("start user:%d",uid) script := fmt.Sprintf(`function test(){ var ret="nok"; $.ajax({ cache: false, async: false, type: 'POST', url: '/u/` + strconv.FormatInt(uid, 10) + `/follow', success: function (data, status) { ret= "ok"; } }); return ret} return ( test()); `) ret,_:=wd.GetDriver().ExecuteScript(script, nil); if reflect.TypeOf(ret)!=reflect.TypeOf("ok"){ continue } if ret.(string)=="ok"{ logs.Debug("follow user:%d ok",uid) uid++ } } }
初始uid傳入1就行,間隔50毫秒提交一次,很快就能刷到幾十萬。
接下來訂閱號:
原理都差不多,
只需要替換下上面的post提交地址就行。
$.ajax({
cache: false,
async: false,
type: 'POST',
url: '/favorites/subject/` + strconv.FormatInt(sid, 10) + `',
success: function (data, status) {
ret= "ok";
}
});
文章收藏:
一樣的原理,就不貼程式碼了。
總結下這裡主要用到了go+selenium的一個用法:
通過分析網路請求,拼湊出js程式碼,然後呼叫瀏覽器執行js。(這就是個人覺得selenium在爬蟲運用中最最最變態的)。
除了自己寫js,還能直接呼叫原生代碼,也就是網站自己的js。