1. 概述
不知你是否遇到過在微信上給通訊錄中的某個人發訊息,結果出現了這一幕:
平時一直認為自己的心裡素質過硬,不過遇到這種情況 ...
在我緩了半個鐘頭(半分鐘)之後,緩緩拿出了手機,開啟微信,找到通訊錄中的 ABC
,默默地按下了刪除按鈕,此刻的我心如止水 ...
好了,我們回到正題,為了避免再次出現上述情況,我決定把微信通訊錄中刪除了自己的人全部找出來並且刪除,之前我已經在網上了解到檢查自己的微信是否被刪比較好的方式就是轉賬,通過轉賬我們可以實現無痕檢測。
下面我們通過兩張圖片直觀的看一下微信被刪前後給別人轉賬的效果:
現在已經知道了檢測方式,正在我準備挨個檢測時,無意識的滑動了微信通訊錄列表,100、200 ... 500 ...
我去!什麼時候加了這麼多人,滑動列表的同時我順勢掃了一眼微信名字:A賣保險、B辦理信用卡、C游泳健身、D賣保健品 ... 此刻我知道了微信通訊錄中有這麼多人的玄機,但是有個問題,這麼多人我挨個手動執行轉賬還不累屎了 ...
如果手動執行的方式行不通,那麼可以通過程式設計的方式自動化執行嗎?想到這裡我陷入了沉思 ...
突然我腦中閃了一下(不是抽筋哈),思緒漸明,前幾天我不是寫了一篇Python + Appium 自動化操作微信入門嗎?用這個應該就可以實現,程式設計實現的基本思路如下:
-
獲取微信通訊錄列表中每個人的名字(備註)並記錄,這個是不會有重複的,因為即使在之前加好友時有重複的,自己也會在備註時給改了
-
遍歷獲取到的通訊錄列表,分別對每一個人執行轉賬操作,如果檢測到是刪除自己的人就對其執行刪除操作,如果檢測到不是刪除自己的人則繼續檢測下一個人,依次往復迴圈
2. 環境
因之前在模擬器上測試 Appium 模擬微信轉賬可能有點問題,因此本文使用真機實現。
先簡單介紹一下真機環境,下面一起來看一下相應步驟。
-
從桌角下取出我的小米5s手機(MIUI10.2、Android8.0.0),擦擦灰塵後用資料線將其連到自己的電腦上
-
手機充了一會電之後開機,開啟微信登入自己的微訊號
-
在手機中依次執行(點選):設定->我的裝置->全部引數->MIUI版本(多次點選,開啟開發者模式)->返回設定列表->更多設定->開發者選項->開啟開發者選項並分別開啟:USB除錯、USB安裝、USB除錯(安全設定)選項,如圖所示:
- 此時手機上會彈出USB的用途彈框,我們選擇傳輸檔案(MTP)即可,如圖所示:
- 在電腦 CMD 中執行
adb devices
命令,看是否能找到自己的手機,比如下圖所示就是成功的結果了
- 在上面步驟中你可能出現找不到手機的情況,通常這種情況是驅動問題,這裡介紹一種簡單的處理方式:下載一個驅動精靈,安裝啟動之後點選驅動管理,之後安裝相應驅動即可解決,如圖所示:
通過上面的一系列操作,我們已經處理好了真機環境了。
Appium 的環境本文就不說了,如果不清楚的話,可以看一下:Python + Appium 自動化操作微信入門。
3. 實現
下面我們開始手動敲程式碼,如果對 Appium 基本程式碼操作不瞭解的話,還是可以去看一下我之前寫的這篇:Python + Appium 自動化操作微信入門。
首先看一下相應引數配置,程式碼實現如下:
desired_caps = {
"platformName": "Android", # 系統
"platformVersion": "8.0.0", # 系統本號
"deviceName": "m5s", # 裝置名
"appPackage": "com.tencent.mm", # 包名
"appActivity": ".ui.LauncherUI", # app 啟動時主 Activity
'unicodeKeyboard': True, # 使用自帶輸入法
'noReset': True # 保留 session 資訊,可以避免重新登入
}
接著看一下如何獲取微信通訊錄名字(備註)列表?程式碼實現如下:
# 獲取通訊錄列表
def get_address_list():
driver.find_elements_by_id('com.tencent.mm:id/cn_')[1].click()
# 獲取暱稱(備註)
address_list = driver.find_elements_by_id('com.tencent.mm:id/dy5')
remarks = []
for address in address_list:
remark = address.get_attribute("content-desc")
# 排除自己和微信官方號
if remark != "自己的微信名" and "微信" not in remark:
remarks.append(remark)
return remarks
取到了微信通訊錄列表之後,我們就可以對其進行遍歷檢測了,下面看一下如何實現檢測自己的微信是否被刪,程式碼實現如下:
# 判斷是否被刪
def is_delete(remark, count):
if count == "1":
time.sleep(2)
print('點選微信搜尋框')
driver.find_element_by_id('com.tencent.mm:id/cn1').click()
time.sleep(2)
print('在搜尋框輸入搜尋資訊')
driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys(remark)
time.sleep(2)
print('點選搜尋到的好友')
driver.find_element_by_id('com.tencent.mm:id/tm').click()
time.sleep(2)
# 轉賬
driver.find_element_by_id('com.tencent.mm:id/aks').click()
time.sleep(2)
driver.find_elements_by_id('com.tencent.mm:id/pa')[5].click()
time.sleep(2)
driver.find_element_by_id('com.tencent.mm:id/cx_').click()
time.sleep(2)
driver.find_element_by_id('com.tencent.mm:id/cxi').click()
time.sleep(5)
# 判斷是否被刪
is_exist = is_element_exist('com.tencent.mm:id/jh')
if is_exist is True:
return remark
else:
return False
上述方法中,如果檢測到是刪了自己微信的人就返回那個人的微信名(備註),然後我們將這些人記錄起來;如果檢測到不是刪除自己微信的人就返回 False。
上述過程執行完了之後,我們就可以獲取到所有刪了自己微信的人了,接下來我們就可以將這些人都從自己微信通訊錄中刪除了,刪除實現的程式碼如下:
# 刪除把自己刪除的人
def del_person(nicks):
for inx, val in enumerate(nicks):
time.sleep(2)
if inx == 0:
print('在搜尋框輸入搜尋資訊')
driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys(val)
else:
time.sleep(2)
print('點選微信搜尋框')
driver.find_element_by_id('com.tencent.mm:id/cn1').click()
print('在搜尋框輸入搜尋資訊')
time.sleep(1)
driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys(val)
time.sleep(2)
print('點選搜尋到的人')
driver.find_element_by_id('com.tencent.mm:id/tm').click()
time.sleep(2)
print('點選聊天對話方塊右上角...')
driver.find_element_by_id('com.tencent.mm:id/cj').click()
time.sleep(2)
print('點選頭像')
driver.find_element_by_id('com.tencent.mm:id/f3y').click()
time.sleep(2)
print('點選聯絡人右上角...')
driver.find_element_by_id('com.tencent.mm:id/cj').click()
time.sleep(2)
print('點選刪除按鈕')
driver.find_element_by_id('com.tencent.mm:id/g6f').click()
time.sleep(2)
print('點選彈出框中的刪除')
driver.find_element_by_id('com.tencent.mm:id/doz').click()
至此,我們就利用 Python + Appium 實現了自動化找出微信中刪除自己的人並將其刪除的工作了。
原始碼在公號 Python小二 後臺回覆 201108 獲取。