我不想關注你了,飯否

寫完題目才發現好像有些標題黨...html

背景

事情是這樣的,以前常常上飯否看一些大佬們的腦洞以及開一些新腦洞,但長此以往,不知道是本身手殘仍是被機器人操做了,關注列表出現了一大批本身不認識的陌生人,忽然遞增到了140+人node

人數

過多的人數已經嚴重打擾了個人timeline,只能手動取消關注。在取消關注的時候才發現,飯否只支持單我的取消關注,沒辦法批量操做。ajax

取消關注

難道只能連續點140下嗎...得考慮下如何進行批量操做。shell

思路

批量操做,通常是由腳原本完成,這裏咱們先觀察一下飯否的取消關注方式:bash

  1. 每次點擊取消關注後,會發送一個POST請求,看一下data中的主要內容:
    POST請求
  2. 其中用戶信息和鑑權驗證,都是放在請求的cookie中實現的。
  3. 在data信息中,有以下幾個字段。由分析可得知,其實重要信息就是friend好友id的獲取:
    • action: friend.remove,是處理接觸好友的方法名(固定)
    • friend: 好友的id
    • token: 本人的token值(固定)
    • ajax: 是否爲ajax方式(固定)
  4. 那麼咱們看一下html部分,經測試發現,每一個人是一個li標籤,子元素a標籤的href取值,便是每一個人的id
    dom元素
  5. 全部關鍵信息均可以獲取到了,下面即可以寫腳本了。

實現

這裏有兩種方式:cookie

  1. 一種方式是利用node和shell腳本,經過ajax對好友關係進行遍歷,拿到html後獲取到全部人的id,以後僞造remove請求,對idList中每一個元素進行取關處理。
  2. 直接在console中處理,獲取到DOM元素以後過濾到idList列表,以後對每一個id進行remove請求的fetch操做。

這兩種方法相比,第一種方法須要處理用戶鑑權、登陸信息,以及引用ajax依賴等,考慮到時間成本,直接使用第二種方法進行實現:cors

  1. 手動進入某個頁碼,遍歷DOM中的每一個<li>標籤,獲取到全部的href取值。
  2. 先取關一個好友,而後在network中copy請求的fetch操做,這樣的話能夠直接設置header,利用cookie攻擊
    copy as fetch
  3. 處理idList中的元素,對每一個元素根據步驟2中的fetch,替換body中的內容進行處理。

下面貼出具體代碼:dom

// 獲取idList
let nameList = [].map.call(document.getElementsByClassName('avatar'),(item)=>item.href.replace('http://fanfou.com/',''))

// 進行fetch操做
nameList.forEach(item=>{
	fetch("${url}", {"credentials":"include","headers":${header信息},"body":`action=friend.remove&friend=${item}&token=xxx&ajax=yes`,"method":"POST","mode":"cors"});
})
複製代碼

尾巴

這種方式雖然簡單,但仍須要手動的進行分頁的控制,你們有興趣能夠試試第一種實現方式來作腳本測試一下。測試

相關文章
相關標籤/搜索