遇到微信牛皮癬怎么辦?我用Python,輕輕松松就清除干凈

微信群牛皮癬,指的是在微信群里毫無下限的群發小廣告的用戶,是微信群主最痛恨的一波人。

他們偽裝成正常人混進群然后不停的發送廣告轟炸,嚴重的打亂了群內的技術交流氣氛

或者是一聲不吭的去騷擾每一個群成員:point_down:

雖然不清楚是什么能夠驅使他們這樣不折不扣的努力成為最強微信群牛皮癬(可能是鈔能力),但在經歷太多次的騷擾之后,我開始思考是否可以用Python消滅他們。

第一回合

經過這幾個月,近百份發廣告用戶的樣本訓練,我這個“?人工智能?”基本可以判斷一個非正常用戶?至少滿足下面幾條中的三條以上?:

沒有設置?微信號

頭像為網紅女生

微信名為特殊符號或者表情

沒發過?朋友圈

沒有?朋友圈?背景圖

通過后不會有除進群申請外的其他回復

不知從何時起,雖然這些庫還能安裝使用但是微信基本已經?禁止了大部分人的網頁版微信登陸權限?,因此當我使用多個微信號分別掃完登陸微信的二維碼之后,無一例外的提示我

1203為了你的帳號安全,此微信號已不允許登錄網頁微信。你可以使用Windows微信或Mac微信在電腦端登錄。

這就讓人頭疼了,總不能手動的去一個一個check我的幾千個微信好友吧,于是我開始思考是否有其他的解決辦法。

第二回合

RequestsSeleniumpynput

pynput是一款使用Python來控制和監控電腦鼠標、鍵盤的第三方庫,直接用API取數據搞不定,那么我就像Selenium一樣,?模擬點擊?一個一個好友來實現我想要的操作。

因為沒有太多依賴庫所以安裝起來很簡單,直接 pip install pynput 即可,使用起來也很簡單,對于鼠標操作只依賴坐標。

pynput除了使可以使用 Controller 來控制鼠標,也可以監控鼠標,比如使用下面的代碼就可以記錄下程序啟動后鼠標的每一個點擊操作所在的位置:point_down:

frompynputimportmousedefon_move(x, y ):print('鼠標移動至 {0}'.format(? (x,y)))defon_click(x, y , button, pressed):print('{0} 在坐標 {1}'.format('鼠標點擊'ifpressedelse'鼠標釋放', (x, y)))ifnotpressed:returnFalsewhileTrue:withmouse.Listener(on_move = on_move,on_click = on_click)aslistener:? listener.join()

我們只需要保持微信窗口不移動,再記錄下每一個關鍵位置的坐標(?微信圖標位置,群聊窗口位置,單個群成員頭像位置?)之后,就可以按照模擬以下操作實現:

點擊微信app

點擊需要的群聊

依次點擊每一個群成員頭像

移動到微信號的位置

雙擊該微信號

復制該微信號判斷是否為初始微信號

在上面的過程中,值得說的是最后一步,復制我們可以使用pynput中的鍵盤控制器,在雙擊選中對應微信號之后通過下面的代碼實現模擬鍵盤輸入 Command + C 完成復制操作

frompynput.keyboardimportKeyfrompynput.keyboardimportControllerasController1keyboard = Controller1()withkeyboard.pressed(Key.cmd):? ? keyboard.press('c')? ? keyboard.release('c')

但是粘貼則不需要使用pynput通過模擬 command+c 來粘貼到另一個編輯中復雜過程,我們可以使用第三方庫 pyperclip ,直接通過下面兩行代碼即可將復制好的文字轉為?字符串

importpyperclippyperclip.paste()

在將群成員的微信號轉換為?字符串?后,不論我們是通過判斷字符串的長度還是用正則表達式或者是其他的方法都可以輕松的判斷該成員的微信號是否為初始微信號,實現規則1的判斷,下面的代碼與動態圖就是獲取第一個群成員微信號的?完整過程

frompynput.mouseimportButton, Controllerimporttimefrompynput.keyboardimportKeyfrompynput.keyboardimportControllerasController1importpyperclipmouse = 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()withkeyboard.pressed(Key.cmd):? ? keyboard.press('c')? ? keyboard.release('c')? ? time.sleep(1)wechatid = pyperclip.paste()print(f"微信號{wechatid}疑似廣告號"iflen(wechatid) >20elsef"微信號{wechatid}不是廣告號")

可以看到成功將早小起的微信從廣告號中排除

那么接下來只需要記錄下每兩個群成員之間間隔的坐標距離,之后循環去?模擬滾動?或者?下拉?來實現上述過程,就可以將群里所有成員的微信號根據規則1進行判斷,找到異常的那些成員?單獨進行判斷?。

可以看到最終是找到了6個疑似廣告號的微信,接下來通過其他規則的手動判斷最終將兩個用戶判定為廣告高風險用戶并移除。

寫在最后

通過上面的操作,依舊很難去判斷是否真的踢對了人,如果踢錯了,那么則粉絲-1,同時也可以發現想用Python準確找到群里的牛皮癬還是非常困難的, pynput 有著和 selenium 同樣的缺點,那就是由于?模擬真人操作而導致的速度慢?,并且它的定位方式?僅支持坐標?,所以還需要保證在操作的過程中微信窗口不可以被移動,否則之前記錄的元素將全部失效,此處建議開發者可以升級更多的定位方式。

今日分享就到這里,有想要學習Python基礎的,可以私信我“學習+py”,我可以免費分享關于Python基礎的學習課程,提供給大家拿去學習,大家記得給小編點一下關注哦~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。