摘要:幾天前我在考慮使用從發送消息。當應用程序構建時,我想到了使用手機本身自動發送消息的想法。我找到了一個命令行工具,它可以幫助人們在不接觸手機的情況下控制手機。
幾天前我在考慮使用 python 從 whatsapp 發送消息。和你們一樣,我開始潛伏在互聯網上尋找一些解決方案并找到了關于twilio. 一開始,是一個不錯的解決方案,但它不是免費的,我必須購買一個 twilio 電話號碼。此外,我無法在互聯網上找到任何可用的 whatsapp API。所以我放棄了使用 twilio 和任何其他 whatsapp API 的想法。在想了很多之,打開 android studio,我連接了我的手機,然后開始了這個過程。當應用程序構建時,我想到了使用手機本身自動發送 whatsapp 消息的想法。我搜索了一些差不多的東西,發現了一些很有可能解決我的問題的東西。我找到了一個命令行工具,adb它可以幫助人們在不接觸手機的情況下控制手機。
你應該擁有的東西
安裝
首先,轉到此鏈接并在您的系統中下載 adb。
解壓文件夾并將 adb 放入環境變量中。下面是在環境變量中添加 adb 的完整過程,
開始
讓我們首先導入一些我們需要的依賴項。您可以使用pip.
import cv2import subprocess
我們將需要子進程通過命令行調用 adb 并獲取輸出,我們需要 cv2 進行一些圖像處理,以便 python 能夠點擊屏幕或任何其他任務。
現在讓我們在下面創建一個名為 adb 的基本函數,
def adb(command): proc = subprocess.Popen(command.split(" "), stdout=subprocess.PIPE, shell=True) (out, _) = proc.communicate() return out.decode("utf-8")
上面的函數基本上是通過子進程調用 adb 并檢索我們將需要的輸出。
輕敲
現在讓我們編寫代碼,其中 python 將單擊移動設備的屏幕。所以我們將創建一個名為 tap 的函數,它會點擊屏幕上的特定位置。
def tap(tap_x, tap_y): adb("adb shell input tap {} {}".format(tap_x, tap_y))tap(100,100)
這將單擊距 x 100 像素和距 y 100 像素。現在您一定在想,為每個命令硬編碼坐標是非常困難的,并且當設備改變時它不會工作,這就是為什么在本博客的下一節中我們將使用圖像處理來檢測坐標自動地。
截圖
def take_screenshot(final): adb(f"adb exec-out screencap -p > ./images/{final}.png")
代碼很簡單。我們制作了一個功能,可以保存手機內部圖像目錄的屏幕截圖。在函數中,我們可以傳遞圖像文件的名稱。
高級點擊
現在,我們將使用目標圖像來自動檢測坐標,而不是傳遞坐標。為了更好地理解這一點,讓我們舉個例子,我有這個屏幕 ,我想打開我們中間的應用程序,然后將使用一個稱為. 通過這個過程,我們將截取屏幕截圖 > 使用模板匹配計算我們中間圖標的坐標 > 點擊那里
TemplateMatching
ef image_position(small_image, big_image): img_rgb = cv2.imread(big_image) img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) template = cv2.imread(small_image, 0) height, width = template.shape[::] res = cv2.matchTemplate(img_gray, template, cv2.TM_SQDIFF) _, _, top_left, _ = cv2.minMaxLoc(res) bottom_right = (top_left[0] + width, top_left[1] + height) return (top_left[0]+bottom_right[0])//2, (top_left[1]+bottom_right[1])//2screen="screen"take_screenshot(screen)x, y = image_position("images/among_us_icon.png", f"images/{screen}")click(x,y)# WOWWW Python successfully opened among us app.
有了上面的代碼,即使你在手機屏幕上改變了我們游戲的位置,python仍然可以打開游戲。
我們還能做什么?
你可以用 adb 和 python 做更多的事情。讓我們談談其中的一些。
滑動
def swipe(start_x, start_y, end_x, end_y, duration_ms): adb("adb shell input swipe {} {} {} {} {}".format(start_x, start_y, end_x, end_y, duration_ms))
打電話給某人
def call(number): adb(f"adb shell am start -a android.intent.action.CALL -d tel:{number}")call("+91xxxxxxxxxx") # +[CODE][NUMBER]
從手機下載文件到電腦
在這里插入圖片描述
def download(path, output_path): adb(f"adb pull {path} {output_path}")從手機中刪除文件def remove(path): adb(f"adb shell rm {path}") #/sdcard/...
手機錄屏
# name is the video_file name and time is the seconds you want to recorddef screen_record(name, time): adb(f"adb shell screenrecord /sdcard/{name} --time-limit {time}") download(f"/sdcard/{name}",f"./mobile/{name}") remove(f"/sdcard/{name}")
打開手機
def switch_phone_on_off(): adb("adb shell input keyevent 26")
還有更多類似 26 的關鍵事件。如果您想知道,請訪問此鏈接。
打開網址
def open_url(url): adb(f"adb shell am start -a android.intent.action.VIEW -d {url}")open_url("https://www.google.co.in/")
發送 Whatsapp 消息
好的,所以我覺得這很酷。在獲得了所有這些基本的理解之后,我們已經解決了我的主要問題,即發送沒有二維碼的 whatsapp 消息,沒有像 twilio 這樣的付費方法。這有點棘手,但它在我的手機上工作。我希望它也適用于你的。
def send_whatsapp_message(phone, message): adb(f"adb shell am start -a android.intent.action.VIEW -d "https://api.whatsapp.com/send?phone={phone}"") # Opening whatsapp url adb("ping 127.0.0.1 -n 2 > nul") # delay adb(f"adb shell input text "{message}"") # entering message adb("adb shell keyevent 22") # Right arrow adb("adb shell keyevent 22") # Right arrow adb("adb shell input keyevent 22") # Right arrow adb("adb shell input keyevent 22") # Right arrow adb("adb shell input keyevent 66") # Enter Keysend_whatsapp_message("+91xxxxxxxxxx", "blah blah blah")
消息已發送!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/122011.html
摘要:使用包控制手機時,需要在手機上安裝在電腦中使用彈出運行框,在框內輸入調用命令行窗口。具備較多功能,在此不再贅述,百度具有較多資料。調試工具用于查看手機當前狀態用瀏覽器控制手機調試手機,還可以實時的查找控件中的屬性以及其它屬性值等等。 1. 配置Python環境變量 Python環境變...
摘要:代碼運行完成以后,微信被打開了。能不能像前面打開知乎一樣,使用這個屬性呢也行,也不行。滑動屏幕使用的命令為,滑動屏幕需要使用坐標信息。單獨使用控制手機在 想開發網頁爬蟲,發現被反爬了?想對 App 抓包,發現數據被加密了?不要擔心,使用 Airtest 開發 App 爬蟲,只要人眼能看到,你就能抓到,最快只需要2分鐘,兼容 Unity3D、Cocos2dx-*、Android 原生 A...
摘要:首先要打開微信,進入到指定的群聊,識別微信紅包執行搶紅包的動作。是一款基于控件識別的自動化測試框架,目前支持原生原生微信小程序,也可以在其他引擎中自行接入來使用。 showImg(https://segmentfault.com/img/remote/1460000019438856); 目錄:0 引言1 環境2 需求分析3 前置準備4 搶紅包流程回顧5 代碼梳理6 后記 0 引言 提...
閱讀 1640·2023-04-25 18:19
閱讀 2084·2021-10-26 09:48
閱讀 1084·2021-10-09 09:44
閱讀 1736·2021-09-09 11:35
閱讀 3030·2019-08-30 15:54
閱讀 2029·2019-08-30 11:26
閱讀 2290·2019-08-29 17:06
閱讀 890·2019-08-29 16:38