欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python自動掃描出微信不是好友名單的方法

 更新時間:2021年05月20日 08:43:06   作者:Huny  
很多人想要清楚已經(jīng)被刪除的好友名單。面對龐大的好友數(shù)量想要清除談何容易,本文主要介紹了Python自動掃描出微信不是好友名單的方法,感興趣的可以了解一下

前言

最近找?guī)讉€老友準備聊天發(fā)現(xiàn)幾個已經(jīng)被刪除好友名單,做為潛水黨多年的我已經(jīng)不知道成為多少人的黑名單,但是好友列表卻依然有不是好友的名單,面對龐大的好友數(shù)量想要清除談何容易。雖然可以發(fā)消息給所有人,來識別是否是好友,但是畢竟打擾到了其他人,經(jīng)過一番查詢發(fā)現(xiàn)點擊轉(zhuǎn)賬時會提示不是好友,這里只是點擊轉(zhuǎn)賬并不是真的轉(zhuǎn)賬哦。做為一名技術(shù)潛水黨,肯定要低調(diào)的辦好事情。之前已經(jīng)用appium玩過自動化了,那么這次就輕車熟路了。

準備

1.Appium環(huán)境搭建
環(huán)境搭建這里不再介紹,需要的可以看我之前的文章或者百度
2.手動操作流程圖轉(zhuǎn)自動操作流程圖


最開始畫的流程圖,然后按照流程圖去實現(xiàn)操作流程和邏輯。初步實現(xiàn)完成后進行調(diào)試,過程中不少邏輯不嚴謹?shù)牡胤剑约耙恍┛蚣茏詭У目?,最終總算可以一次性掃描了。但是其中還是存在個別的坑需要手動處理一下。暫時先記錄下來,等以后看情況優(yōu)化吧。
遇到暫停基本是聊天窗識別不到了,可以手動上滑一下,讓程序識別下一個聊天窗口。需要先登陸微信號。

代碼

from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from selenium.common.exceptions import StaleElementReferenceException

# platformVersion = input('系統(tǒng)版本號(platformVersion): ')
# deviceName = input('設備名稱(deviceName):')


desired_caps = {
    "platformName": "Android",  # 系統(tǒng)
    "platformVersion": '10.0',  # 系統(tǒng)版本號
    # "platformVersion": platformVersion,  # 系統(tǒng)版本號
    "deviceName": 'b68548ed',  # 設備名
    # "deviceName": deviceName,  # 設備名
    "appPackage": "com.tencent.mm",  # 包名
    "appActivity": ".ui.LauncherUI",  # app 啟動時主 Activity
    'unicodeKeyboard': True,  # 使用自帶輸入法
    'noReset': True  # 保留 session 信息,可以避免重新登錄
}


def is_element_exist(driver, by, value):
    """判斷元素是否存在"""
    try:
        driver.find_element(by=by, value=value)
    except Exception as e:
        return False
    else:
        return True


def break_key(n):
    """點擊返回按鈕"""
    for i in range(n):
        el1 =  wait.until(EC.element_to_be_clickable((By.ACCESSIBILITY_ID,"返回")))
        el1.click()

def swipe_up():
    """向上滑動屏幕"""
    # 獲取屏幕的size
    size = driver.get_window_size()
    # 獲取屏幕寬度 width
    width = size['width']
    # 獲取屏幕高度 height
    height = size['height']
    x1 = width*0.5
    y1 = height*0.45
    y2 = height*0.3
    driver.swipe(x1,y1,x1,y2,3000)
    print("向上滑動")
    

if __name__ == '__main__':
    driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
    # 設置等待
    wait = WebDriverWait(driver, 300)
    status = True
    n = 2
    count = 1   
    while status:
        try:
            # 點擊通訊錄
            a1 = wait.until(EC.element_to_be_clickable(
                (By.XPATH, "http://android.widget.FrameLayout[@content-desc=\"當前所在頁面,與的聊天\"]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.ImageView")))
            a1.click()
            #向上滑動
            swipe_up()
            if n < 13:
                # 進入第一個聊天窗口,公眾號為1,用戶元素定位從2開始,一頁最多12,每滑動屏幕從新開始到12.
                g73 = wait.until(EC.element_to_be_clickable(
                    (By.XPATH, "http://android.widget.FrameLayout[@content-desc='當前所在頁面,與的聊天']/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/com.tencent.mm.ui.mogic.WxViewPager/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.ListView/android.widget.LinearLayout[%d]/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.view.View"%(n))))
                g73.click()
                print("進入了第%d個好友聊天窗口"%(count))
                count += 1
            else:
                n -= 1
                g73 = wait.until(EC.element_to_be_clickable(
                    (By.XPATH, "http://android.widget.FrameLayout[@content-desc='當前所在頁面,與的聊天']/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout/com.tencent.mm.ui.mogic.WxViewPager/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.ListView/android.widget.LinearLayout[%d]/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.view.View"%(n))))
                g73.click()
                print("進入了第%d個好友聊天窗口"%(count))
                count += 1
            # 判斷聊天窗是否有發(fā)送消息的元素
            is_weichat = is_element_exist(driver, "id", "com.tencent.mm:id/ijq")
            if is_weichat == True:
                while True:
            #     # 有發(fā)消息則點擊
                    wait.until(EC.element_to_be_clickable(
                    (By.ID, "com.tencent.mm:id/ijq"))).click()
                    print("點擊了發(fā)消息")
                    #點擊+號
                    is_jia = is_element_exist(driver, 'id', 'com.tencent.mm:id/ay7')
                    #判斷是否有加號
                    if is_jia == True:
                        el4 = wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/ay7")))
                        el4.click()
                        print('點擊+號')
                        #判斷是否為轉(zhuǎn)賬
                        is_zhuanzhang = wait.until(EC.element_to_be_clickable((By.XPATH,"http://android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.view.ViewGroup/android.widget.GridView/android.widget.LinearLayout[6]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TextView")))
                        if is_zhuanzhang.text == "轉(zhuǎn)賬":
                        # is_zhuanzhang = is_element_exist(driver, 'xpath', '//android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.view.ViewGroup/android.widget.GridView/android.widget.LinearLayout[6]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TextView')
                        # if is_zhuanzhang == True:
                            #點擊轉(zhuǎn)賬
                            el5 =  wait.until(EC.element_to_be_clickable((By.XPATH,"http://android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.view.ViewGroup/android.widget.GridView/android.widget.LinearLayout[6]/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.ImageView[2]")))
                            el5.click()
                            print('點擊轉(zhuǎn)賬')
                            #輸入金額0.01
                            el6 = wait.until(EC.element_to_be_clickable((By.ID,"com.tencent.mm:id/jf4")))
                            el6.send_keys("0.01")
                            print('輸入金額')
                            #點擊確認轉(zhuǎn)賬
                            el7 =  wait.until(EC.element_to_be_clickable((By.ID,"com.tencent.mm:id/e6c")))
                            el7.click()
                            print('點擊確認轉(zhuǎn)賬')
                            time.sleep(2)
                            #判斷是否有知道了
                            is_not_friend = is_element_exist(driver,'id','com.tencent.mm:id/ffp')
                            if is_not_friend == True:
                            #點擊知道了
                                el8 =  wait.until(EC.element_to_be_clickable((By.ID,"com.tencent.mm:id/ffp")))
                                el8.click()
                                print('點擊知道了')
                                #獲取用戶名稱并打印
                                el9 =  wait.until(EC.element_to_be_clickable((By.ID,"com.tencent.mm:id/h2k")))
                                print('不是好友的微信名稱為:',el9.text)
                                with open('weixin.txt','a+')as f:
                                    f.write('不是好友的微信名稱:' + el9.text + '\n')
                                driver.keyevent(4)
                                driver.keyevent(4)
                                driver.keyevent(4)
                                driver.keyevent(4)
                                print('返回')
                                n += 1                
                                break
                            else:
                                #沒有知道則返回
                                driver.keyevent(4)
                                break_key(2)
                                n += 1
                                print('返回')
                                break
                        else:
                            #沒有轉(zhuǎn)賬則返回到首頁
                            driver.keyevent(4)
                            driver.keyevent(4) 
                            print('返回')
                            n += 1
                            break

                    else:
                        #沒有+號則返回到首頁
                        driver.keyevent(4)
                        driver.keyevent(4)
                        print('返回')
                        n += 1
                        break
        except StaleElementReferenceException:
            print('捕獲StaleElementReferenceException異常')                    

這里已經(jīng)掃描到200多個好友了,其中可能需要手動上滑一下


不是好友的名單會在當前目錄生成一個txt文件進行保存


偶然出現(xiàn)幾個異常,不知道是什么原因


總的來說功能基本都已經(jīng)實現(xiàn)了,還有細節(jié)問題后面看情況優(yōu)化吧

到此這篇關于Python自動掃描出微信不是好友名單的方法的文章就介紹到這了,更多相關Python自動掃描出微信好友內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python中numpy.pad()函數(shù)的使用詳解

    Python中numpy.pad()函數(shù)的使用詳解

    這篇文章主要介紹了Python中numpy.pad()函數(shù)的使用詳解,在卷積神經(jīng)網(wǎng)絡中,為了避免卷積運算導致輸出圖像縮小和圖像邊緣信息丟失,常常采用圖像邊緣填充技術(shù),即在圖像四周邊緣填充0,使得卷積運算后圖像大小不會縮小,同時也不會丟失邊緣和角落的信息,需要的朋友可以參考下
    2023-10-10
  • Python2 與Python3的版本區(qū)別實例分析

    Python2 與Python3的版本區(qū)別實例分析

    這篇文章主要介紹了Python2 與Python3的版本區(qū)別,結(jié)合實例形式分析了Python2 與Python3的版本使用過程中的各種常見區(qū)別、用法與注意事項,需要的朋友可以參考下
    2020-03-03
  • Python列表創(chuàng)建與銷毀及緩存池機制

    Python列表創(chuàng)建與銷毀及緩存池機制

    這篇文章主要介紹了Python列表創(chuàng)建與銷毀及緩存池機制,文章基于python展開對列表創(chuàng)建與銷毀內(nèi)容的展開,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • python selenium循環(huán)登陸網(wǎng)站的實現(xiàn)

    python selenium循環(huán)登陸網(wǎng)站的實現(xiàn)

    這篇文章主要介紹了python selenium循環(huán)登陸網(wǎng)站的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Python使用Selenium、PhantomJS爬取動態(tài)渲染頁面

    Python使用Selenium、PhantomJS爬取動態(tài)渲染頁面

    本文主要介紹了Python使用Selenium、PhantomJS爬取動態(tài)渲染頁面,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • python實現(xiàn)RGB與YCBCR顏色空間轉(zhuǎn)換

    python實現(xiàn)RGB與YCBCR顏色空間轉(zhuǎn)換

    這篇文章主要介紹了python實現(xiàn)RGB與YCBCR顏色空間轉(zhuǎn)換,RGB與YCbCr顏色空間概念的與變換關系,包括內(nèi)容灰度值和亮度的關系、RGB顏色空間與顏色控制、YCbCr顏色空間及與RGB的變換關系,需要的小伙伴可以參考一下
    2022-03-03
  • Python內(nèi)置數(shù)學函數(shù)和math模塊使用指南

    Python內(nèi)置數(shù)學函數(shù)和math模塊使用指南

    這篇文章主要為大家介紹了Python數(shù)學函數(shù)math模塊使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 最新anaconda安裝配置教程

    最新anaconda安裝配置教程

    Anaconda是一個開源的Python發(fā)行版本,包括Conda、Python以及一大堆安裝好的工具包,比如:numpy、pandas等,這篇文章主要介紹了最新anaconda安裝配置教程,需要的朋友可以參考下
    2023-04-04
  • 詳解Python利用configparser對配置文件進行讀寫操作

    詳解Python利用configparser對配置文件進行讀寫操作

    這篇文章主要介紹了詳解Python利用configparser對配置文件進行讀寫操作,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • python爬蟲beautifulsoup庫使用操作教程全解(python爬蟲基礎入門)

    python爬蟲beautifulsoup庫使用操作教程全解(python爬蟲基礎入門)

    這篇文章主要介紹了python爬蟲beautifulsoup庫使用操作全解(python爬蟲基礎入門),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論