自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

微信群總有人發(fā)廣告?用Python寫(xiě)一個(gè)自動(dòng)化機(jī)器人消滅他

開(kāi)發(fā) 后端 機(jī)器人 自動(dòng)化
雖然不清楚是什么能夠驅(qū)使他們這樣不折不扣的努力成為最強(qiáng)微信群牛皮癬(可能是鈔能力),但在經(jīng)歷太多次的騷擾之后,我開(kāi)始思考是否可以用Python消滅他們。

[[341536]]

微信群牛皮癬,指的是在微信群里毫無(wú)下限的群發(fā)小廣告的用戶,是微信群主最痛恨的一波人。如果熟悉早起的讀者可以知道我有一個(gè)技術(shù)交流群,但是自從建群以來(lái)就飽受小廣告的困擾。他們偽裝成正常人混進(jìn)群然后不停的發(fā)送廣告轟炸,嚴(yán)重的打亂了群內(nèi)的技術(shù)交流氣氛。

或者是一聲不吭的去騷擾每一個(gè)群成員。

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

第一回合

其實(shí)一開(kāi)始的思路很簡(jiǎn)單,總共分兩步,首先成功識(shí)別出這些人再用Python將他們踢出去即可。

但是這兩步,每一步都不簡(jiǎn)單,先來(lái)說(shuō)說(shuō)第一步如何準(zhǔn)確的識(shí)別這些用戶,網(wǎng)上沒(méi)有數(shù)據(jù)也沒(méi)有一個(gè)好的鑒別標(biāo)準(zhǔn),只能用我的大腦完成特征識(shí)別。經(jīng)過(guò)這幾個(gè)月,近百份發(fā)廣告用戶的樣本訓(xùn)練,我這個(gè)“人工智能”基本可以判斷一個(gè)非正常用戶至少滿足下面幾條中的三條以上:

  •  沒(méi)有設(shè)置微信號(hào)
  •  頭像為網(wǎng)紅女生
  •  微信名為特殊符號(hào)或者表情
  •  沒(méi)發(fā)過(guò)朋友圈
  •  沒(méi)有朋友圈背景圖
  •  通過(guò)后不會(huì)有除進(jìn)群申請(qǐng)外的其他回復(fù)

并且根據(jù)歷史數(shù)據(jù),符合1、3條的用戶有極大概率為小廣告愛(ài)好者,那么接下來(lái)要做的就是用Python寫(xiě)代碼找出微信里面的這些人。在總結(jié)出這一規(guī)律后很樂(lè)觀的認(rèn)為實(shí)現(xiàn)這一需求并不困難,因?yàn)槲以趲啄昵熬驮眠^(guò)Python研究微信好友,不論是wxpy還是itchat操作起來(lái)應(yīng)該都不復(fù)雜,但是事實(shí)確證明我還是太年輕了

不知從何時(shí)起,雖然這些庫(kù)還能安裝使用但是微信基本已經(jīng)禁止了大部分人的網(wǎng)頁(yè)版微信登陸權(quán)限,因此當(dāng)我使用多個(gè)微信號(hào)分別掃完登陸微信的二維碼之后,無(wú)一例外的提示我 

  1. <error><ret>1203</ret><message>  
  2. 為了你的帳號(hào)安全,此微信號(hào)已不允許登錄網(wǎng)頁(yè)微信。  
  3. 你可以使用Windows微信或Mac微信在電腦端登錄。  
  4. </message></error> 

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

第二回合

如果你經(jīng)常寫(xiě)Python爬蟲(chóng),那么你會(huì)知道在有些情況下,與其使用Requests對(duì)付一些惡心的反爬措施,不如Selenium操作起來(lái)方便。所以在發(fā)現(xiàn)想使用基于微信API的思路失效后,我將目光轉(zhuǎn)向了相對(duì)笨一點(diǎn)的方法————pynput

pynput是一款使用Python來(lái)控制和監(jiān)控電腦鼠標(biāo)、鍵盤(pán)的第三方庫(kù),說(shuō)到這里你大概明白我想怎么做了,直接用API取數(shù)據(jù)搞不定,那么我就像Selenium一樣,模擬點(diǎn)擊一個(gè)一個(gè)好友來(lái)實(shí)現(xiàn)我想要的操作。

下面簡(jiǎn)單說(shuō)一下這個(gè)庫(kù),因?yàn)闆](méi)有太多依賴庫(kù)所以安裝起來(lái)很簡(jiǎn)單,直接pip install pynput即可,使用起來(lái)也很簡(jiǎn)單,對(duì)于鼠標(biāo)操作只依賴坐標(biāo),看個(gè)demo👇

就像上面GIF演示的一樣,先導(dǎo)入pynput并實(shí)例一個(gè)鼠標(biāo)控制器,接著將微信在狀態(tài)欄的位置提交給mouse.position,這樣鼠標(biāo)就會(huì)移動(dòng)到該位置,再使用mouse.press來(lái)模擬鼠標(biāo)點(diǎn)擊即可自動(dòng)打開(kāi)微信。那么問(wèn)題來(lái)了,如何獲得我想要的位置的坐標(biāo)?總不能一點(diǎn)一點(diǎn)試吧!

pynput除了使可以使用Controller來(lái)控制鼠標(biāo),也可以監(jiān)控鼠標(biāo),比如使用下面的代碼就可以記錄下程序啟動(dòng)后鼠標(biāo)的每一個(gè)點(diǎn)擊操作所在的位置👇 

  1. from pynput import mouse  
  2. def on_move(x, y ):  
  3.  print('鼠標(biāo)移動(dòng)至 {0}'.format(  
  4.   (x,y))) 
  5. def on_click(x, y , button, pressed):  
  6.  print('{0} 在坐標(biāo) {1}'.format('鼠標(biāo)點(diǎn)擊' if pressed else '鼠標(biāo)釋放', (x, y)))  
  7.  if not pressed:  
  8.   return False 
  9. while True:  
  10.  with mouse.Listener(on_moveon_move = on_move,on_clickon_click = on_click) as listener:  
  11.   listener.join() 

那么接下來(lái)的任務(wù)就簡(jiǎn)單了,我們只需要保持微信窗口不移動(dòng),在記錄下每一個(gè)關(guān)鍵位置的坐標(biāo)(微信圖標(biāo)位置,群聊窗口位置,單個(gè)群成員頭像位置)之后,比如我們想對(duì)上面說(shuō)的第一條規(guī)則進(jìn)行判斷即獲取每一個(gè)群成員微信號(hào)是否設(shè)置,就可以按照模擬以下操作實(shí)現(xiàn):

  •  點(diǎn)擊微信app
  •  點(diǎn)擊需要的群聊
  •  依次點(diǎn)擊每一個(gè)群成員頭像
  •  移動(dòng)到微信號(hào)的位置
  •  雙擊該微信號(hào)
  •  復(fù)制該微信號(hào)判斷是否為初始微信號(hào)

在上面的過(guò)程中,值得說(shuō)的是最后一步,復(fù)制我們可以使用pynput中的鍵盤(pán)控制器,在雙擊選中對(duì)應(yīng)微信號(hào)之后通過(guò)下面的代碼實(shí)現(xiàn)模擬鍵盤(pán)輸入Command + C完成復(fù)制操作 

  1. from pynput.keyboard import Key  
  2. from pynput.keyboard import Controller as Controller1  
  3. keyboard = Controller1()  
  4. with keyboard.pressed(Key.cmd):  
  5.     keyboard.press('c')  
  6.     keyboard.release('c') 

但是粘貼則不需要使用pynput通過(guò)模擬command+c來(lái)粘貼到另一個(gè)編輯中復(fù)雜過(guò)程,我們可以使用第三方庫(kù)pyperclip,直接通過(guò)下面兩行代碼即可將復(fù)制好的文字轉(zhuǎn)為字符串 

  1. import pyperclip  
  2. pyperclip.paste() 

在將群成員的微信號(hào)轉(zhuǎn)換為字符串后,不論我們是通過(guò)判斷字符串的長(zhǎng)度還是用正則表達(dá)式或者是其他的方法都可以輕松的判斷該成員的微信號(hào)是否為初始微信號(hào),實(shí)現(xiàn)規(guī)則1的判斷,下面的代碼與動(dòng)態(tài)圖就是獲取第一個(gè)群成員微信號(hào)的完整過(guò)程 

  1. from pynput.mouse import Button, Controller  
  2. import time  
  3. from pynput.keyboard import Key  
  4. from pynput.keyboard import Controller as Controller1  
  5. import pyperclip  
  6. mouse = Controller()  
  7. # 點(diǎn)擊微信  
  8. mouse.position = (1046.14453125, 4.546875)  
  9. time.sleep(2)  
  10. mouse.press(Button.left)  
  11. mouse.release(Button.left)  
  12. #點(diǎn)擊頭像  
  13. mouse.position = (1194.140625, 441.05859375)  
  14. time.sleep(1)  
  15. mouse.press(Button.left)  
  16. mouse.release(Button.left)  
  17. # 點(diǎn)擊選中文本 
  18. mouse.position = (965.60546875, 284.0390625)  
  19. time.sleep(1)  
  20. mouse.click(Button.left, 2)  
  21. keyboard = Controller1()  
  22. with keyboard.pressed(Key.cmd):  
  23.     keyboard.press('c')  
  24.     keyboard.release('c')  
  25.     time.sleep(1) 
  26. wechatid = pyperclip.paste()  
  27. print(f"微信號(hào){wechatid}疑似廣告號(hào)" if len(wechatid) > 20 else f"微信號(hào){wechatid}不是廣告號(hào)") 

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

那么接下來(lái)只需要記錄下每?jī)蓚€(gè)群成員之間間隔的坐標(biāo)距離,之后循環(huán)去模擬滾動(dòng)或者下拉來(lái)實(shí)現(xiàn)上述過(guò)程,就可以將群里所有成員的微信號(hào)根據(jù)規(guī)則1進(jìn)行判斷,找到異常的那些成員單獨(dú)進(jìn)行判斷。

可以看到最終是找到了6個(gè)疑似廣告號(hào)的微信,接下來(lái)通過(guò)其他規(guī)則的手動(dòng)判斷最終將兩個(gè)用戶判定為廣告高風(fēng)險(xiǎn)用戶并移除。

寫(xiě)在最后

通過(guò)上面的操作,雖然成功的踢出了兩個(gè)疑似廣告號(hào),但總體來(lái)說(shuō)還是敗了。因?yàn)橐琅f很難去判斷是否真的踢對(duì)了人,如果踢錯(cuò)了,那么則粉絲-1,同時(shí)也可以發(fā)現(xiàn)想用Python準(zhǔn)確找到群里的牛皮癬還是非常困難的,使用pynput最多可以完成微信名、微信號(hào)及頭像(使用識(shí)圖API)的判斷,但是朋友圈隱藏的更多信息卻很難提取挖掘。

同時(shí)pynput有著和selenium同樣的缺點(diǎn),那就是由于模擬真人操作而導(dǎo)致的速度慢,并且它的定位方式僅支持坐標(biāo),所以還需要保證在操作的過(guò)程中微信窗口不可以被移動(dòng),否則之前記錄的元素將全部失效,此處建議開(kāi)發(fā)者可以升級(jí)更多的定位方式。 

 

責(zé)任編輯:龐桂玉 來(lái)源: AI科技大本營(yíng)
相關(guān)推薦

2021-04-01 10:51:44

機(jī)器人人工智能編程

2022-09-30 13:55:46

Python機(jī)器人

2021-04-21 13:56:32

人工智能機(jī)器學(xué)習(xí)

2020-04-14 15:33:37

Python 釘釘機(jī)器人

2023-07-11 16:35:13

機(jī)器人流程自動(dòng)化

2019-04-02 09:00:00

機(jī)器人人工智能HMI設(shè)計(jì)

2023-02-09 07:34:52

ChatGPT機(jī)器人人工智障

2020-04-11 22:21:07

開(kāi)源機(jī)器人過(guò)程自動(dòng)化工具RPA

2018-06-08 16:18:43

Python微信聊天機(jī)器人

2024-03-04 15:04:37

機(jī)器人人工智能

2018-12-04 15:10:56

Python微信備忘錄

2017-11-27 15:17:24

PythonMonkey腳本

2023-10-30 17:41:29

機(jī)器人自動(dòng)化

2018-03-21 10:25:40

銀行機(jī)器人人工智能

2013-04-10 16:04:12

微信微信機(jī)器人技巧

2020-04-29 11:28:54

智能自動(dòng)化機(jī)器人流程自動(dòng)化AI

2021-08-06 09:35:37

Python盯盤(pán)機(jī)器人編程語(yǔ)言

2020-12-02 13:00:17

Recast.AI聊天機(jī)器人人工智能

2021-08-11 11:18:25

機(jī)器人人工智能技術(shù)

2019-04-19 14:40:15

代碼Python機(jī)器人
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)