最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你用python控制安卓手機(jī)

 更新時(shí)間:2021年05月13日 15:43:05   作者:有理想的coder  
不久前,我在思考如何通過向好友發(fā)送幾分鐘的垃圾郵件來惹惱我的朋友,而在做一些研究的過程中,我遇到了Android調(diào)試橋.在本快速指南中,我將向您展示如何使用Python與之交互以及如何創(chuàng)建2個(gè)快速腳本.需要的朋友可以參考下

一、介紹

ADB(Android調(diào)試橋)是一個(gè)命令行工具(CLI),可用于控制Android設(shè)備并與之通信。您可以執(zhí)行許多操作,例如安裝應(yīng)用程序,調(diào)試應(yīng)用程序,查找隱藏的功能并使用外殼程序直接與設(shè)備連接。要啟用ADB,您的設(shè)備必須首先解鎖開發(fā)者選項(xiàng)并啟用USB調(diào)試。要解鎖開發(fā)人員選項(xiàng),您可以轉(zhuǎn)到設(shè)備設(shè)置,然后向下滾動(dòng)到“關(guān)于”部分,找到設(shè)備上當(dāng)前軟件的內(nèi)部版本號(hào)。單擊內(nèi)部版本號(hào) 7次,將啟用開發(fā)人員選項(xiàng)。然后,您可以轉(zhuǎn)到設(shè)置中的“開發(fā)人員選項(xiàng)”面板,然后從那里啟用USB調(diào)試。現(xiàn)在,您唯一需要做的另一件事就是將設(shè)備連接到計(jì)算機(jī)的USB電纜。

這是今天的旅程:

1.安裝要求

2.入門

3.編寫腳本的基礎(chǔ)

4.創(chuàng)建自拍計(jì)時(shí)器創(chuàng)

5.建定義搜索器

二、安裝要求

我們需要安裝的兩件事中的第一件事是計(jì)算機(jī)上的ADB工具。它會(huì)自動(dòng)與Android Studio捆綁在一起,因此,如果您已經(jīng)擁有了,那就不用擔(dān)心了。否則,您可以轉(zhuǎn)到[官方文檔](https://developer.android.com/studio/command-line/adb),并且在頁面頂部應(yīng)有有關(guān)如何安裝它的說明。

安裝ADB工具后,您需要獲取python庫,我們將使用該庫與ADB和我們的設(shè)備進(jìn)行接口。您可以使用pip install pure-python-adb安裝pure-python-adb庫。

可選:為使我們?cè)陂_發(fā)腳本時(shí)更輕松,我們可以安裝一個(gè)名為scrcpy的開源程序,該程序允許我們使用鼠標(biāo)和鍵盤在我們的計(jì)算機(jī)上顯示和控制我們的android設(shè)備。要安裝它,您可以轉(zhuǎn)到[Github repo](https://github.com/Genymobile/scrcpy)并下載適用于您的操作系統(tǒng)(Windows,macOS或Linux)的正確版本。如果您使用的是Windows,則將zip文件解壓縮到一個(gè)目錄中,然后將此目錄添加到您的路徑中。這樣一來,我們只需在終端窗口中鍵入scrcpy即可從系統(tǒng)上的任何位置訪問該程序。

三、入門

現(xiàn)在已經(jīng)安裝了所有依賴項(xiàng),我們可以啟動(dòng)ADB并連接設(shè)備。首先,使用USB電纜將設(shè)備連接到PC,如果啟用了USB調(diào)試,則會(huì)彈出一條消息,詢問PC是否可以控制設(shè)備,只需回答是。然后在您的PC上,打開一個(gè)終端窗口,并通過鍵入adb start-server來啟動(dòng)ADB服務(wù)器。這應(yīng)該打印出以下消息:

  • daemon not running; starting now at tcp:5037
  • daemon started successfully

如果您還安裝了scrcpy,則可以通過在終端中鍵入**scrcpy來啟動(dòng)它。但是,這僅在將其添加到路徑時(shí)才有效,否則可以通過將終端目錄更改為安裝scrcpy的目錄并鍵入scrcpy.exe**來打開可執(zhí)行文件。希望一切順利,您應(yīng)該能夠在PC上看到您的設(shè)備,并能夠使用鼠標(biāo)和鍵盤對(duì)其進(jìn)行控制。

現(xiàn)在,我們可以創(chuàng)建一個(gè)新的python文件,并檢查是否可以使用該庫找到連接的設(shè)備:

rom ppadb.client import Client as AdbClient

if __name__ == '__main__':
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037

    devices = client.devices()

    if len(devices) == 0:
        print('No devices')
        quit()

    device = devices[0]

    print(f'Connected to {device}')

在這里,我們導(dǎo)入AdbClient類并使用它創(chuàng)建一個(gè)客戶端對(duì)象。然后,我們可以獲得連接的設(shè)備的列表。最后,我們從列表中獲得第一臺(tái)設(shè)備(如果僅連接了一個(gè)設(shè)備,則通常是唯一的設(shè)備)。

四、編寫腳本的基礎(chǔ)

我們要與設(shè)備連接的主要方式是使用外殼,通過這種方式,我們可以發(fā)送命令以模擬特定位置的觸摸或從A滑動(dòng)到B。要模擬屏幕觸摸(輕擊),我們首先需要工作了解屏幕坐標(biāo)的工作方式。為了幫助解決這些問題,我們可以在開發(fā)人員選項(xiàng)中激活指針位置設(shè)置。激活后,無論您在屏幕上的何處觸摸,都可以看到該點(diǎn)的坐標(biāo)顯示在頂部。坐標(biāo)系的工作方式如下:

在這里插入圖片描述

該圖顯示了坐標(biāo)系的工作方式

顯示屏的左上角分別具有* x y 坐標(biāo)(0,0),并且右下角的坐標(biāo)是 x y *的最大可能值。

現(xiàn)在我們知道了坐標(biāo)系的工作原理,我們需要檢查一下可以運(yùn)行的不同命令。我在下面列出了命令列表以及如何使用它們,以供快速參考:

Input tap x y
Input text “hello world!”
Input keyevent eventID
Here is a list of some common eventID's:
3: home button
4: back button
5: call
6: end call
24: volume up
25: volume down
26: turn device on or off
27: open camera
64: open browser
66: enter
67: backspace
207: contacts
220: brightness down
221: brightness up
277: cut
278: copy
279: paste

如果您想找到更多,請(qǐng)?jiān)谶@里找到一長串清單。https://forum.xda-developers.com/t/q-adb-input-keyevent-for-long-press-on-power- button.2063741 / post-64890206。

五、創(chuàng)建自拍計(jì)時(shí)器

現(xiàn)在我們知道我們能做什么,讓我們開始吧。在第一個(gè)示例中,我將向您展示如何創(chuàng)建一個(gè)快速的自拍計(jì)時(shí)器。首先,我們需要導(dǎo)入我們的庫并創(chuàng)建一個(gè)connect函數(shù)以連接到我們的設(shè)備:

import time

from ppadb.client import Client as AdbClient

def connect():
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037

    devices = client.devices()

    if len(devices) == 0:
        print('No devices')
        quit()

    device = devices[0]

    print(f'Connected to {device}')

    return device, client

您可以看到connect函數(shù)與前面的如何連接到設(shè)備的示例相同,除了這里我們返回設(shè)備和客戶端對(duì)象以供以后使用。

if __name__ == '__main__':
    device, client = connect()

    # open up camera app
    device.shell('input keyevent 27')

    # wait 5 seconds
    time.sleep(5)

    # take a photo with volume up
    device.shell('input keyevent 24')
    print('Taken a photo!')

在我們的主代碼中,我們可以調(diào)用connect函數(shù)來檢索設(shè)備和客戶端對(duì)象。從那里我們可以打開相機(jī)應(yīng)用程序,等待5秒鐘并拍照。真的就是這么簡單!正如我之前說過的,這只是復(fù)制您通常會(huì)做的事情,因此,如果您首先手動(dòng)進(jìn)行操作并寫下步驟,則思考如何做事情是最好的。

六、創(chuàng)建定義搜索器

現(xiàn)在,我們可以做一些更復(fù)雜的事情,那就是要求瀏覽器找到特定單詞的定義,并截圖以將其保存在我們的計(jì)算機(jī)上。

該程序的基本流程如下:

1.打開瀏覽器

2.單擊搜索欄

3.輸入搜索查詢

4.等待幾秒鐘

5.截圖并保存

但是,在我們開始之前,您需要在默認(rèn)瀏覽器中找到搜索欄的坐標(biāo),您可以使用我之前建議的方法輕松地找到它們。對(duì)我來說,他們是(440,200)。

首先,我們將必須導(dǎo)入與以前相同的庫,并且我們還將具有相同的connect方法。

import time

from ppadb.client import Client as AdbClient

def connect():
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037

    devices = client.devices()

    if len(devices) == 0:
        print('No devices')
        quit()

    device = devices[0]

    print(f'Connected to {device}')

    return device, client

在我們的主要函數(shù)中,我們可以調(diào)用connect函數(shù),并為我們的搜索欄的* x y *坐標(biāo)分配一個(gè)變量。注意這是一個(gè)字符串,而不是列表或元組,這樣我們可以輕松地將坐標(biāo)合并到我們的shell命令中。我們還可以從用戶那里獲取輸入信息,以查看他們想要獲取哪個(gè)單詞的定義:

if __name__ == '__main__':
    device, client = connect()

    search_bar = '440 200' # x y

    query = input('What word do you want to find the definition of: ')
    search_query = f'what is the definition of {query}'

我們會(huì)將查詢添加到完整的句子中,然后對(duì)其進(jìn)行搜索,這樣我們就可以始終獲取定義。之后,我們可以打開瀏覽器,然后將搜索查詢輸入到搜索欄中,如下所示:

device.shell('input keyevent 64')

time.sleep(0.25) # wait for browser to load

device.shell(f'input tap {search_bar}')

device.shell(f'input text "{search_query}"') # make sure you have the quotation marks around your text
device.shell('input keyevent 66')

time.sleep(3) # wait for results to load

在這里,我們使用eventID 66模擬輸入鍵的按下以執(zhí)行搜索。如果需要,可以根據(jù)需要更改等待時(shí)間。

最后,我們將在設(shè)備對(duì)象上使用screencap方法獲取屏幕截圖,然后可以將其另存為* .png *文件:

screenshot = device.screencap()

with open('result.png', 'wb') as f: # save the screenshot as result.png
    f.write(screenshot)
    print('Saved screenshot!')

在這里,我們必須以寫字節(jié)模式打開文件,因?yàn)閟creencap方法返回表示圖像的字節(jié)。

如果一切都按計(jì)劃進(jìn)行,則應(yīng)該有一個(gè)快速腳本來搜索特定單詞。這在我的手機(jī)上正常工作:

在這里插入圖片描述

七、最后的想法

希望您今天學(xué)到了一些新知識(shí),在我對(duì)此進(jìn)行研究之前,我個(gè)人甚至都不知道這是一回事。很酷的事情是,您可以執(zhí)行平??梢宰龅娜魏问虑?,而且還可以做更多的事,因?yàn)樗皇悄M您自己的觸摸和動(dòng)作!

希望您喜歡這篇文章,并感謝您的閱讀! 💖

到此這篇關(guān)于教你用python控制安卓手機(jī)的文章就介紹到這了,更多相關(guān)用python控制手機(jī)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用python爬蟲爬取CSDN博主信息

    用python爬蟲爬取CSDN博主信息

    這篇文章主要介紹了如何用python爬蟲獲取CSDN博主信息的方法,原理和代碼寫的非常詳細(xì),對(duì)大家學(xué)習(xí)Python爬取很有用處,有需要的朋友可以和小編一起看一下
    2021-04-04
  • python 實(shí)現(xiàn)打印掃描效果詳情

    python 實(shí)現(xiàn)打印掃描效果詳情

    這篇文章主要介紹了python 實(shí)現(xiàn)打印掃描效果詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 學(xué)會(huì)使用Python?Configparser處理ini文件模塊

    學(xué)會(huì)使用Python?Configparser處理ini文件模塊

    這篇文章主要為大家介紹了使用Python?Configparser處理ini文件模塊的學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 理解Django 中Call Stack機(jī)制的小Demo

    理解Django 中Call Stack機(jī)制的小Demo

    這篇文章主要介紹了理解Django 中Call Stack 機(jī)制的小Demo,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python神經(jīng)網(wǎng)絡(luò)TensorFlow基于CNN卷積識(shí)別手寫數(shù)字

    Python神經(jīng)網(wǎng)絡(luò)TensorFlow基于CNN卷積識(shí)別手寫數(shù)字

    這篇文章主要介紹了Python神經(jīng)網(wǎng)絡(luò)TensorFlow基于CNN卷積識(shí)別手寫數(shù)字的實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Python csv文件的讀寫操作實(shí)例詳解

    Python csv文件的讀寫操作實(shí)例詳解

    這篇文章主要介紹了Python csv文件的讀寫操作實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python實(shí)戰(zhàn)之Elasticsearch的高級(jí)實(shí)現(xiàn)詳解

    Python實(shí)戰(zhàn)之Elasticsearch的高級(jí)實(shí)現(xiàn)詳解

    Elasticsearch是一個(gè)功能強(qiáng)大的開源搜索引擎,廣泛應(yīng)用于各種場(chǎng)景,本文將深入探討如何使用Python與Elasticsearch進(jìn)行高級(jí)實(shí)現(xiàn),需要的可以參考下
    2024-04-04
  • Python OpenCV實(shí)現(xiàn)識(shí)別信用卡號(hào)教程詳解

    Python OpenCV實(shí)現(xiàn)識(shí)別信用卡號(hào)教程詳解

    本文將介紹如何通過 OpenCV 和 Python 使用模板匹配來執(zhí)行光學(xué)字符識(shí)別 (OCR),再應(yīng)用我們的模板匹配 OCR 方法來識(shí)別信用卡類型以及 16 位信用卡數(shù)字。代碼具有一定價(jià)值,感興趣的童鞋可以了解一下
    2021-11-11
  • 詳解Django-restframework 之頻率源碼分析

    詳解Django-restframework 之頻率源碼分析

    這篇文章主要介紹了Django-restframework 之頻率源碼分析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • 詳解python中DRF框架的數(shù)據(jù)校驗(yàn)方式

    詳解python中DRF框架的數(shù)據(jù)校驗(yàn)方式

    這篇文章主要為大家詳細(xì)介紹了python中DRF框架的數(shù)據(jù)校驗(yàn)方式,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-10-10

最新評(píng)論

佛教| 成安县| 贡山| 菏泽市| 大名县| 囊谦县| 安仁县| 金塔县| 德庆县| 获嘉县| 丹寨县| 泌阳县| 汉中市| 分宜县| 根河市| 二连浩特市| 宁阳县| 漳州市| 措美县| 南宫市| 安陆市| 洪江市| 泽库县| 洮南市| 万年县| 秦安县| 盖州市| 酉阳| 景东| 岗巴县| 崇义县| 荣成市| 锡林郭勒盟| 盐城市| 深圳市| 大同市| 兴文县| 安平县| 兴山县| 桃园市| 保康县|