1. 程式人生 > >GO+Selenium批量關注各大網站實戰 3 (開發者頭條號)

GO+Selenium批量關注各大網站實戰 3 (開發者頭條號)

這次實戰的網站是開發者頭條。

主要實現的功能有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。