微信群總是有人發廣告?看我用Python寫一個自動化機器人消滅他!
大資料文摘授權轉載自早起Python
作者:劉早起
微信群牛皮癬,指的是在微信群裡毫無下限的群發小廣告的使用者,是微信群主最痛恨的一波人。
如果熟悉早起的讀者可以知道我有一個技術交流群,但是自從建群以來就飽受小廣告的困擾。他們偽裝成正常人混進群然後不停的傳送廣告轟炸,嚴重的打亂了群內的技術交流氣氛?
或者是一聲不吭的去騷擾每一個群成員?
雖然不清楚是什麼能夠驅使他們這樣不折不扣的努力成為最強微信群牛皮癬(可能是鈔能力),但在經歷太多次的騷擾之後,我開始思考是否可以用Python消滅他們。
第一回合
第一回合
其實一開始的思路很簡單,總共分兩步,首先成功識別出這些人再用Python將他們踢出去即可。
但是這兩步,每一步都不簡單,先來說說第一步如何準確的識別這些使用者,網上沒有資料也沒有一個好的鑑別標準,只能用我的大腦完成特徵識別。經過這幾個月,近百份發廣告使用者的樣本訓練,我這個“人工智慧”基本可以判斷一個非正常使用者至少滿足下面幾條中的三條以上:
沒有設定微訊號
頭像為網紅女生
微信名為特殊符號或者表情
沒發過朋友圈
沒有朋友圈背景圖
透過後不會有除進群申請外的其他回覆
並且根據歷史資料,符合1、3條的使用者有極大機率為小廣告愛好者,那麼接下來要做的就是用Python寫程式碼找出微信裡面的這些人。
在總結出這一規律後很樂觀的認為實現這一需求並不困難,因為我在幾年前就曾拿過Python研究微信好友,不論是wxpy還是itchat操作起來應該都不復雜,但是事實確證明我還是太年輕了
不知從何時起,雖然這些庫還能安裝使用但是微信基本已經禁止了大部分人的網頁版微信登陸許可權,因此當我使用多個微訊號分別掃完登陸微信的二維碼之後,無一例外的提示我
<error><ret>1203</ret><message>
為了你的帳號安全,此微訊號已不允許登入網頁微信。
你可以使用Windows微信或Mac微信在電腦端登入。
</message></error>
這就讓人頭疼了,總不能手動的去一個一個check我的幾千個微信好友吧,於是我開始思考是否有其他的解決辦法。
第二回合
第二回合
如果你經常寫Python爬蟲,那麼你會知道在有些情況下,與其使用Requests對付一些噁心的反爬措施,不如Selenium操作起來方便。所以在發現想使用基於微信API的思路失效後,我將目光轉向了相對笨一點的方法————pynput
pynput是一款使用Python來控制和監控電腦滑鼠、鍵盤的第三方庫,說到這裡你大概明白我想怎麼做了,直接用API取資料搞不定,那麼我就像Selenium一樣,模擬點選一個一個好友來實現我想要的操作。
下面簡單說一下這個庫,因為沒有太多依賴庫所以安裝起來很簡單,直接pip install pynput即可,使用起來也很簡單,對於滑鼠操作只依賴座標,看個demo?
就像上面GIF演示的一樣,先匯入pynput並例項一個滑鼠控制器,接著將微信在狀態列的位置提交給mouse.position,這樣滑鼠就會移動到該位置,再使用mouse.press來模擬滑鼠點選即可自動開啟微信。那麼問題來了,如何獲得我想要的位置的座標?總不能一點一點試吧!
pynput除了使可以使用Controller來控制滑鼠,也可以監控滑鼠,比如使用下面的程式碼就可以記錄下程式啟動後滑鼠的每一個點選操作所在的位置?
from pynput import mouse
def on_move(x, y ):
print('滑鼠移動至 {0}'.format(
(x,y)))
def on_click(x, y , button, pressed):
print('{0} 在座標 {1}'.format('滑鼠點選' if pressed else '滑鼠釋放', (x, y)))
if not pressed:
return False
while True:
with mouse.Listener(on_move = on_move,on_click = on_click) as listener:
listener.join()
那麼接下來的任務就簡單了,我們只需要保持微信視窗不移動,在記錄下每一個關鍵位置的座標(微信圖示位置,群聊視窗位置,單個群成員頭像位置)之後。
比如我們想對上面說的第一條規則進行判斷即獲取每一個群成員微訊號是否設定,就可以按照模擬以下操作實現:
點選微信app
點選需要的群聊
依次點選每一個群成員頭像
移動到微訊號的位置
雙擊該微訊號
複製該微訊號判斷是否為初始微訊號
在上面的過程中,值得說的是最後一步,複製我們可以使用pynput中的鍵盤控制器,在雙擊選中對應微訊號之後透過下面的程式碼實現模擬鍵盤輸入Command + C完成複製操作
from pynput.keyboard import Key
from pynput.keyboard import Controller as Controller1
keyboard = Controller1()
with keyboard.pressed(Key.cmd):
keyboard.press('c')
keyboard.release('c')
但是貼上則不需要使用pynput透過模擬command+c來貼上到另一個編輯中複雜過程,我們可以使用第三方庫pyperclip,直接透過下面兩行程式碼即可將複製好的文字轉為字串
import pyperclip
pyperclip.paste()
在將群成員的微訊號轉換為字串後,不論我們是透過判斷字串的長度還是用正規表示式或者是其他的方法都可以輕鬆的判斷該成員的微訊號是否為初始微訊號,實現規則1的判斷,下面的程式碼與動態圖就是獲取第一個群成員微訊號的完整過程
from pynput.mouse import Button, Controller
import time
from pynput.keyboard import Key
from pynput.keyboard import Controller as Controller1
import pyperclip
mouse = Controller()
# 點選微信
mouse.position = (1046.14453125, 4.546875)
time.sleep(2)
mouse.press(Button.left)
mouse.release(Button.left)
#點選頭像
mouse.position = (1194.140625, 441.05859375)
time.sleep(1)
mouse.press(Button.left)
mouse.release(Button.left)
# 點選選中文字
mouse.position = (965.60546875, 284.0390625)
time.sleep(1)
mouse.click(Button.left, 2)
keyboard = Controller1()
with keyboard.pressed(Key.cmd):
keyboard.press('c')
keyboard.release('c')
time.sleep(1)
wechatid = pyperclip.paste()
print(f"微訊號{wechatid}疑似廣告號" if len(wechatid) > 20 else f"微訊號{wechatid}不是廣告號")
可以看到成功將早小起的微信從廣告號中排除
那麼接下來只需要記錄下每兩個群成員之間間隔的座標距離,之後迴圈去模擬滾動或者下拉來實現上述過程,就可以將群裡所有成員的微訊號根據規則1進行判斷,找到異常的那些成員單獨進行判斷。
可以看到最終是找到了6個疑似廣告號的微信,接下來透過其他規則的手動判斷最終將兩個使用者判定為廣告高風險使用者並移除。
寫在最後
寫在最後
透過上面的操作,雖然成功的踢出了兩個疑似廣告號,但總體來說還是敗了。因為依舊很難去判斷是否真的踢對了人,如果踢錯了,那麼則粉絲-1,同時也可以發現想用Python準確找到群裡的牛皮癬還是非常困難的,使用pynput最多可以完成微信名、微訊號及頭像(使用識圖API)的判斷,但是朋友圈隱藏的更多資訊卻很難提取挖掘。
同時pynput有著和selenium同樣的缺點,那就是由於模擬真人操作而導致的速度慢,並且它的定位方式僅支援座標,所以還需要保證在操作的過程中微信視窗不可以被移動,否則之前記錄的元素將全部失效,此處建議開發者可以升級更多的定位方式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562039/viewspace-2724380/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python自制微信機器人:群發訊息、自動接收好友Python機器人
- 寫一個自動回覆的聊天機器人機器人
- 用 python 寫一個自動化部署工具Python
- 我用 Python 找出了刪除我微信的所有人並將他們自動化刪除了Python
- 用python寫一個自動化盲註指令碼Python指令碼
- 使用 python 打造一個微信聊天機器人Python機器人
- C#-MVC開發微信應用(5)--自動應答系統-自動回覆機器人C#MVC機器人
- “誤入”清華誇誇群?一行Python程式碼幫你寫個機器人Python機器人
- 機器人使機床自動化機器人
- 機器人宣誓要消滅人類:我們該如何應對?機器人
- [譯] 如何用 Python 寫一個 Discord 機器人Python機器人
- 自動化機器人的興起機器人
- 替身機器人,看我用腦電波控制你機器人
- 如何簡化機器人自動化的整合機器人
- 期末人福音——用Python寫個自動批改作業系統Python作業系統
- 【掘金小報】第十二期 一起來做個微信群管理機器人機器人
- AI實用技巧 | 5分鐘將coze整合到微信群機器人AI機器人
- 3個關鍵點助力工業機器人自動化機器人
- 自動化運維群第三個里程碑總結運維
- 企業微信機器人小助手自動回覆幫助群主維護群機器人
- 利用網頁版微信API做一個微信機器人網頁API機器人
- 那個聲稱要毀滅人類的機器人網紅機器人
- 我也用Node寫個每天給她自動發微信的指令碼指令碼
- 特斯拉Model 3再次停工!這一次還是因為自動化機器人……機器人
- 帶你用 Python 實現自動化群控裝置Python
- SwagBot自動化機器人原型機 澳發明放牧機器人幫助農民(影片)機器人原型
- 用PHP編寫email群發器 (轉)PHPAI
- 總有壞人想爬我網站的資料,看我用這 10 招幹他!網站
- 基於itchat實現微信群訊息同步機器人機器人
- 如何用Java寫一個聊天機器人Java機器人
- 用python玩微信(聊天機器人,好友資訊統計)Python機器人
- 股市QQ群機器人機器人
- 用Python基於Google Bard做一個互動式的聊天機器人PythonGo機器人
- Mac「自動操作」機器人有什麼用?Mac機器人
- SCARA機器人:邁向自動化的下一步機器人
- python 介面自動化,使用 fixture 總是報錯Python
- 用樂高玩具發明寫賀卡的機器人機器人
- 亞馬遜的倉庫機器人又增 1.5 萬臺 “自動化”是發展關鍵詞?亞馬遜機器人