Python利用標(biāo)簽實(shí)現(xiàn)清理微信好友的自動(dòng)化腳本
微信已經(jīng)成為我們?nèi)粘I钪胁豢苫蛉钡纳缃还ぞ?。隨著使用時(shí)間的增長(zhǎng),我們的微信好友列表可能會(huì)變得越來越臃腫。
在上一篇文章中,我寫了一個(gè)自動(dòng)根據(jù)用戶狀態(tài)(好友將我們刪除了還是拉黑了)將用戶打上不同標(biāo)簽的工具。那么,已經(jīng)將用戶打好了標(biāo)簽之后,我們就可以根據(jù)指定的標(biāo)簽名來直接刪除好友了。
在本文中,我將逐步分析這個(gè)用 Python 編寫的自動(dòng)化腳本,它可以通過標(biāo)簽批量清理微信好友。該腳本使用了 uiautomator2
庫(kù),這是一個(gè)強(qiáng)大的Android UI 自動(dòng)化工具,廣泛用于 Android 設(shè)備的自動(dòng)化操作。本腳本就是通過模擬用戶的點(diǎn)擊、滑動(dòng)等操作,實(shí)現(xiàn)自動(dòng)化清理指定標(biāo)簽下的微信好友。
環(huán)境準(zhǔn)備
- 安裝 Python 3.x
- 安裝 uiautomator2 庫(kù):
pip install uiautomator2
- 準(zhǔn)備一臺(tái) Android 設(shè)備,并開啟開發(fā)者模式
- 確保設(shè)備與電腦在同一網(wǎng)絡(luò)環(huán)境下
使用步驟
- 首先給要清理的好友打上統(tǒng)一的標(biāo)簽(這點(diǎn)也可以直接運(yùn)行上文我分享的腳本,可以自動(dòng)化打標(biāo)簽)
- 然后在腳本中設(shè)定腳本名稱,執(zhí)行腳本。
以下是對(duì)代碼的逐行分析,希望幫助大家更好地理解腳本的實(shí)現(xiàn)過程。
代碼分析
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 通過標(biāo)簽清理微信好友 """ import time import uiautomator2 as u2
說明:
#!/usr/bin/env python3
是腳本的設(shè)定,告訴操作系統(tǒng)用 Python3 來執(zhí)行該腳本。# -*- coding: utf-8 -*-
用于指定文件的編碼格式為UTF-8,避免中文字符出現(xiàn)亂碼。- 導(dǎo)入了
time
模塊,用于實(shí)現(xiàn)延時(shí)操作。 uiautomator2
是一個(gè)用于控制 Android 設(shè)備 UI 的 Python 庫(kù),本文腳本依賴它來執(zhí)行自動(dòng)化任務(wù)。
類定義
class WXClearFriendByTag: """ 通過標(biāo)簽清理微信好友 """ def __init__(self, tag_name: str, max_times_tag: int = 5, max_times_friend: int = 5): self.d = u2.connect() # 連接設(shè)備 self.clear_tag_name = tag_name # 需要被清理好友的標(biāo)簽名 self.max_times_tag = max_times_tag # 查找指定標(biāo)簽的最大循環(huán)次數(shù) self.max_times_friend = max_times_friend # 清理好友的最大循環(huán)次數(shù)
說明:
WXClearFriendByTag
類的作用是通過標(biāo)簽清理微信中的好友。初始化時(shí),我們傳入標(biāo)簽名(tag_name
),以及查找標(biāo)簽和清理好友的最大次數(shù)。self.d = u2.connect()
用于連接設(shè)備,u2.connect()
會(huì)自動(dòng)選擇連接到的設(shè)備。如果有多個(gè)設(shè)備,默認(rèn)連接第一個(gè)設(shè)備。max_times_tag
和max_times_friend
分別指定了查找標(biāo)簽和清理好友的最大次數(shù)。
啟用調(diào)試模式
def enable_debug(self): """ 開啟調(diào)試模式 :return: """ print(f"設(shè)備信息 ==> {self.d.info}") print(f"設(shè)備IP ==> {self.d.wlan_ip} 設(shè)備號(hào) ==> {self.d.serial}") self.d.implicitly_wait(30) # 設(shè)置查找元素等待時(shí)間,單位秒
說明:
enable_debug
方法用于啟用調(diào)試模式,打印設(shè)備信息(如設(shè)備IP、設(shè)備號(hào))以及設(shè)置UI元素查找的默認(rèn)超時(shí)時(shí)間。self.d.implicitly_wait(30)
設(shè)置了 UI 元素查找的最大超時(shí)時(shí)間為 30 秒,意味著在操作前,系統(tǒng)會(huì)等待最多 30 秒來查找元素。
進(jìn)入標(biāo)簽頁面
def go_to_tag_page(self): """ 進(jìn)入標(biāo)簽頁面 :return: """ print("打開【通訊錄】") self.d(text='通訊錄', className='android.widget.TextView').click_exists(timeout=3) print("打開【標(biāo)簽】") self.d(text='標(biāo)簽', className='android.widget.TextView').click_exists(timeout=3)
說明:
go_to_tag_page
方法模擬點(diǎn)擊進(jìn)入微信的“通訊錄”頁面,再點(diǎn)擊進(jìn)入“標(biāo)簽”頁面。click_exists(timeout=3)
用來判斷元素是否存在,如果存在則點(diǎn)擊。
查找標(biāo)簽并點(diǎn)擊
def find_tag_click(self): i = 1 while i <= self.max_times_tag: print(f"第{i}次查詢") status = self.find_tag_by_name() if status == 'done': break else: self.d.swipe(100, 1000, 100, 200) i += 1 if i > self.max_times_tag: print(f"沒有找到標(biāo)簽:{self.clear_tag_name}") exit() tag = self.d(text=self.clear_tag_name) if tag.exists() is False: print(f"沒有找到標(biāo)簽:{self.clear_tag_name}") exit() print(f"找了{(lán)i}次,找到了標(biāo)簽:{self.clear_tag_name} 點(diǎn)擊") tag.click_exists(timeout=5)
說明:
find_tag_click
方法的核心是查找指定標(biāo)簽并點(diǎn)擊。首先通過find_tag_by_name()
查找標(biāo)簽,若沒有找到,就會(huì)通過滑動(dòng)屏幕繼續(xù)查找,最多重復(fù)max_times_tag
次。- 滑動(dòng)操作
self.d.swipe(100, 1000, 100, 200)
會(huì)從屏幕下方滑動(dòng)至上方,模擬手動(dòng)滑動(dòng)以加載更多標(biāo)簽。 - 如果找到了目標(biāo)標(biāo)簽,會(huì)點(diǎn)擊該標(biāo)簽進(jìn)入標(biāo)簽頁面。
通過標(biāo)簽名查找標(biāo)簽
def find_tag_by_name(self): run_status = 'doing' elems = self.d(resourceId="com.tencent.mm:id/hs8") for elem in elems: tag_name = elem.get_text(timeout=10) friend_count = elem.sibling(resourceId="com.tencent.mm:id/hs7").get_text(timeout=10) print(f"標(biāo)簽是:{tag_name},好友數(shù):{friend_count}") if tag_name == self.clear_tag_name: run_status = 'done' break return run_status
說明:
find_tag_by_name
方法通過標(biāo)簽的resourceId查找所有標(biāo)簽,獲取每個(gè)標(biāo)簽的名稱和好友數(shù)。- 如果找到指定的標(biāo)簽名,會(huì)返回
'done'
,否則返回'doing'
,供find_tag_click
方法判斷是否繼續(xù)查找。
清理每個(gè)好友
def clear_every_friend(self): """ 清理每個(gè)好友 :return: """ time.sleep(3) elems = self.d(resourceId='com.tencent.mm:id/kbq') if elems.exists() is False: print("沒有找到好友") exit() for elem in elems: time.sleep(1) friend_nickname = elem.get_text(timeout=10) print(f'進(jìn)入好友詳情頁面 --> {friend_nickname}') elem.click(timeout=5) self.d(resourceId='com.tencent.mm:id/coy').click(timeout=5) time.sleep(1) self.d(text='刪除').click(timeout=5) time.sleep(3) self.d(text='刪除', resourceId='com.tencent.mm:id/mm_alert_ok_btn').click(timeout=5) time.sleep(1)
說明:
clear_every_friend
方法負(fù)責(zé)清理每個(gè)好友。首先,通過resourceId='com.tencent.mm:id/kbq'
獲取所有好友元素。- 點(diǎn)擊每個(gè)好友,進(jìn)入好友詳情頁面后,點(diǎn)擊右上角的菜單,選擇刪除該好友。
- 刪除操作是通過點(diǎn)擊【刪除】按鈕實(shí)現(xiàn)的,并最終點(diǎn)擊確認(rèn)框中的【刪除】。
清理標(biāo)簽中的所有好友
def clear_friends_in_tag(self): """ 在標(biāo)簽中清理好友 :return: """ i = 1 while i <= self.max_times_friend: print(f"第{i}次清理好友") self.clear_every_friend() i += 1 print(f"清理了{(lán)i}次好友")
說明:
clear_friends_in_tag
方法用于在標(biāo)簽中清理所有好友。它會(huì)循環(huán)調(diào)用 clear_every_friend
方法,直到達(dá)到 max_times_friend
次。
腳本入口
if __name__ == '__main__': tag_name = "清粉-賬號(hào)問題" wx = WXClearFriendByTag(tag_name) wx.enable_debug() wx.find_tag_click() wx.clear_friends_in_tag()
說明:
if __name__ == '__main__':
是Python腳本的入口,確保腳本從此處開始執(zhí)行。- 創(chuàng)建
WXClearFriendByTag
類的實(shí)例,傳入標(biāo)簽名“清粉-賬號(hào)問題”,并依次調(diào)用enable_debug
、find_tag_click
和clear_friends_in_tag
方法,完成清理操作。
總結(jié)
這段代碼展示了如何使用 uiautomator2
庫(kù)進(jìn)行微信好友管理自動(dòng)化。通過標(biāo)簽篩選好友并刪除,非常適合需要批量清理好友的場(chǎng)景。
對(duì)于初學(xué)者來說,理解此腳本能幫助你掌握如何使用 uiautomator2
控制 Android 設(shè)備,執(zhí)行 UI 操作。
到此這篇關(guān)于Python利用標(biāo)簽實(shí)現(xiàn)清理微信好友的自動(dòng)化腳本的文章就介紹到這了,更多相關(guān)Python清理微信好友內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python selenium實(shí)現(xiàn)發(fā)送帶附件的郵件代碼實(shí)例
這篇文章主要介紹了python selenium實(shí)現(xiàn)發(fā)送帶附件的郵件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Python創(chuàng)建一個(gè)空的dataframe,并循環(huán)賦值的方法
今天小編就為大家分享一篇Python創(chuàng)建一個(gè)空的dataframe,并循環(huán)賦值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11pandas時(shí)間序列之如何將int轉(zhuǎn)換成datetime格式
這篇文章主要介紹了pandas時(shí)間序列之如何將int轉(zhuǎn)換成datetime格式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Python將MP4視頻轉(zhuǎn)換為GIF圖像的三種方法
在數(shù)字時(shí)代,將視頻轉(zhuǎn)換為GIF圖像已成為一種流行的內(nèi)容創(chuàng)作方式,在Python中,有多種庫(kù)可以幫助你將MP4視頻轉(zhuǎn)換為GIF圖像,本文將介紹三種常用的方法:使用moviepy庫(kù)、imageio庫(kù)以及結(jié)合opencv和PIL庫(kù),需要的朋友可以參考下2024-12-12基于Python檢測(cè)動(dòng)態(tài)物體顏色過程解析
這篇文章主要介紹了基于Python檢測(cè)動(dòng)態(tài)物體顏色過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Python Opencv任意形狀目標(biāo)檢測(cè)并繪制框圖
這篇文章主要為大家詳細(xì)介紹了Python Opencv任意形狀目標(biāo)檢測(cè),并繪制框圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07