您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何通過Python實現控制手機”,在日常操作中,相信很多人在如何通過Python實現控制手機問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何通過Python實現控制手機”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
首先,轉到此鏈接并在您的系統中下載 adb。
解壓文件夾并將 adb 放入環境變量中。下面是在環境變量中添加 adb 的完整過程,
在您的手機中啟用 USB 調試,并使用 USB 電纜將您的手機與 PC 連接。
通過打開 cmd 并鍵入,檢查連接是否正確adb devices。您將在連接的設備列表中看到一個設備。
如果您可以看到您的設備,那么您可以打開任何代碼編輯器。我正在使用 Visual Studio 代碼。
讓我們首先導入一些我們需要的依賴項。您可以使用pip.
import cv2 import 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])//2 screen="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 record def 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 消息,沒有像 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 Key send_whatsapp_message('+91xxxxxxxxxx', 'blah blah blah')
到此,關于“如何通過Python實現控制手機”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。