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

Python利用 ADB工具進(jìn)行手機(jī)自動(dòng)化控制

 更新時(shí)間:2025年10月28日 09:59:12   作者:黃思搏  
這篇文章主要為大家詳細(xì)介紹了如何使用 Python 和 ADB 工具實(shí)現(xiàn) PC 控制 Android 手機(jī)自動(dòng)滑動(dòng)視頻的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

教程簡(jiǎn)介

本教程將教你使用 Python 和 ADB 工具實(shí)現(xiàn) PC 控制 Android 手機(jī)自動(dòng)滑動(dòng)視頻的功能。適合零基礎(chǔ)開(kāi)發(fā)者,所有步驟可直接跟隨操作。

一、環(huán)境準(zhǔn)備

1.1 系統(tǒng)要求

  • Windows 10/11、macOS 或 Linux
  • Android 手機(jī)(需開(kāi)啟開(kāi)發(fā)者模式)
  • USB 數(shù)據(jù)線

1.2 安裝 Python

檢查是否已安裝:

python --version

如果顯示版本號(hào)(如 Python 3.x.x),則已安裝,跳到 1.3。

Windows 安裝:

  • 訪問(wèn) https://www.python.org/downloads/
  • 下載 Python 3.8 或更高版本
  • 安裝時(shí)勾選 “Add Python to PATH”
  • 打開(kāi)命令提示符(cmd),輸入 python --version 驗(yàn)證

macOS 安裝:

# 使用 Homebrew
brew install python3

Linux 安裝:

# Ubuntu/Debian
sudo apt update
sudo apt install python3 python3-pip

# CentOS/RHEL
sudo yum install python3 python3-pip

1.3 安裝 ADB 工具

方法一:安裝完整 Android SDK Platform-Tools(推薦)

  • 訪問(wèn) https://developer.android.com/tools/releases/platform-tools
  • 下載對(duì)應(yīng)系統(tǒng)版本
  • 解壓到任意目錄(如 C:\platform-tools
  • 添加到系統(tǒng)環(huán)境變量 PATH

Windows 添加環(huán)境變量:

  • 右鍵"此電腦" → “屬性” → “高級(jí)系統(tǒng)設(shè)置”
  • “環(huán)境變量” → 找到 Path → “編輯” → “新建”
  • 添加 ADB 工具路徑(如 C:\platform-tools

macOS/Linux 添加環(huán)境變量:

# 編輯 ~/.bashrc 或 ~/.zshrc
echo 'export PATH=$PATH:/path/to/platform-tools' >> ~/.zshrc
source ~/.zshrc

驗(yàn)證安裝:

adb version

應(yīng)顯示類似:Android Debug Bridge version 1.0.41

1.4 手機(jī)設(shè)置

開(kāi)啟開(kāi)發(fā)者模式:

  • 設(shè)置 → 關(guān)于手機(jī)
  • 連續(xù)點(diǎn)擊"版本號(hào)"7次
  • 返回設(shè)置 → 系統(tǒng) → 開(kāi)發(fā)者選項(xiàng)
  • 開(kāi)啟"USB調(diào)試"
  • 用 USB 線連接手機(jī)到電腦
  • 手機(jī)上彈出授權(quán)提示,點(diǎn)擊"允許"

驗(yàn)證連接:

adb devices

應(yīng)顯示類似:

List of devices attached
ABC123456789    device

如果顯示 unauthorized,檢查手機(jī)授權(quán)提示。

二、安裝 Python 依賴

2.1 安裝 pure-python-adb

打開(kāi)終端/命令提示符,執(zhí)行:

pip install pure-python-adb

可能遇到的問(wèn)題:

如果提示 pip: command not found

# 嘗試使用 pip3
pip3 install pure-python-adb

# 或者使用 python -m pip
python -m pip install pure-python-adb

如果安裝速度慢,使用國(guó)內(nèi)鏡像:

pip install pure-python-adb -i https://pypi.tuna.tsinghua.edu.cn/simple

2.2 驗(yàn)證安裝

python -c "from ppadb.client import Client; print('安裝成功')"

如果沒(méi)有報(bào)錯(cuò)且顯示"安裝成功",則安裝完成。

三、編寫(xiě)自動(dòng)化腳本

3.1 創(chuàng)建項(xiàng)目目錄

# 創(chuàng)建項(xiàng)目文件夾
mkdir phone-automation
cd phone-automation

3.2 測(cè)試連接腳本

創(chuàng)建 test_connection.py

"""
測(cè)試手機(jī)連接腳本
功能:驗(yàn)證 ADB 連接是否正常
"""

from ppadb.client import Client

def test_connection():
    try:
        # 連接 ADB 服務(wù)器
        adb = Client(host="127.0.0.1", port=5037)
        
        # 獲取設(shè)備列表
        devices = adb.devices()
        
        if len(devices) == 0:
            print("? 未檢測(cè)到設(shè)備")
            print("請(qǐng)檢查:")
            print("1. 手機(jī)是否通過(guò) USB 連接")
            print("2. 是否開(kāi)啟 USB 調(diào)試")
            print("3. 是否授權(quán)此電腦")
            return False
        
        print(f"? 檢測(cè)到 {len(devices)} 個(gè)設(shè)備")
        for device in devices:
            print(f"設(shè)備序列號(hào): {device.serial}")
        
        return True
        
    except Exception as e:
        print(f"? 連接失敗: {e}")
        print("請(qǐng)確保 ADB 服務(wù)已啟動(dòng),執(zhí)行: adb start-server")
        return False

if __name__ == "__main__":
    test_connection()

運(yùn)行測(cè)試:

python test_connection.py

3.3 基礎(chǔ)滑動(dòng)腳本

創(chuàng)建 basic_swipe.py

"""
基礎(chǔ)滑動(dòng)腳本
功能:每隔指定時(shí)間執(zhí)行一次向上滑動(dòng)
"""

from ppadb.client import Client
import time

def swipe_up(device):
    """
    執(zhí)行向上滑動(dòng)操作
    
    參數(shù)說(shuō)明:
    input swipe x1 y1 x2 y2 duration
    x1, y1: 起始坐標(biāo)
    x2, y2: 結(jié)束坐標(biāo)
    duration: 滑動(dòng)持續(xù)時(shí)間(毫秒)
    
    常見(jiàn)分辨率的滑動(dòng)坐標(biāo):
    - 1080x2400: swipe 500 1800 500 600 300
    - 1080x1920: swipe 500 1500 500 500 300
    - 720x1280: swipe 360 1000 360 400 300
    """
    # 這里使用通用坐標(biāo),適配大多數(shù)手機(jī)
    # 從屏幕下方(80%)滑到上方(20%)
    device.shell("input swipe 500 1500 500 500 300")
    print("? 執(zhí)行滑動(dòng)操作")

def main():
    try:
        # 連接設(shè)備
        adb = Client(host="127.0.0.1", port=5037)
        devices = adb.devices()
        
        if len(devices) == 0:
            print("? 未檢測(cè)到設(shè)備,請(qǐng)先連接手機(jī)")
            return
        
        # 使用第一個(gè)設(shè)備
        device = devices[0]
        print(f"?? 已連接設(shè)備: {device.serial}")
        
        # 配置參數(shù)
        interval = 5  # 滑動(dòng)間隔(秒)
        count = 0     # 滑動(dòng)計(jì)數(shù)
        
        print(f"? 每 {interval} 秒滑動(dòng)一次")
        print("按 Ctrl+C 停止\n")
        
        # 持續(xù)滑動(dòng)
        while True:
            count += 1
            print(f"[{count}] {time.strftime('%H:%M:%S')} ", end="")
            swipe_up(device)
            time.sleep(interval)
            
    except KeyboardInterrupt:
        print(f"\n\n??  已停止,共執(zhí)行 {count} 次滑動(dòng)")
    except Exception as e:
        print(f"\n? 發(fā)生錯(cuò)誤: {e}")

if __name__ == "__main__":
    main()

運(yùn)行腳本:

python basic_swipe.py

3.4 完整功能腳本

創(chuàng)建 auto_swipe.py

"""
完整自動(dòng)化滑動(dòng)腳本
功能:
1. 支持自定義滑動(dòng)間隔和次數(shù)
2. 支持指定應(yīng)用包名(可選啟動(dòng)應(yīng)用)
3. 記錄滑動(dòng)日志
4. 異常處理和重連機(jī)制
"""

from ppadb.client import Client
import time
import argparse
from datetime import datetime

class PhoneAutomation:
    def __init__(self, interval=5, total_count=None, app_package=None):
        """
        初始化自動(dòng)化控制器
        
        參數(shù):
        interval: 滑動(dòng)間隔(秒)
        total_count: 總滑動(dòng)次數(shù)(None=無(wú)限次)
        app_package: 應(yīng)用包名(可選)
        """
        self.interval = interval
        self.total_count = total_count
        self.app_package = app_package
        self.device = None
        self.count = 0
        
    def connect_device(self):
        """連接設(shè)備"""
        try:
            adb = Client(host="127.0.0.1", port=5037)
            devices = adb.devices()
            
            if len(devices) == 0:
                print("? 未檢測(cè)到設(shè)備")
                return False
            
            self.device = devices[0]
            print(f"? 已連接設(shè)備: {self.device.serial}")
            return True
            
        except Exception as e:
            print(f"? 連接失敗: {e}")
            return False
    
    def start_app(self):
        """啟動(dòng)指定應(yīng)用(如果配置了包名)"""
        if not self.app_package:
            return
        
        try:
            # 啟動(dòng)應(yīng)用
            self.device.shell(f"monkey -p {self.app_package} -c android.intent.category.LAUNCHER 1")
            print(f"?? 已啟動(dòng)應(yīng)用: {self.app_package}")
            time.sleep(2)  # 等待應(yīng)用啟動(dòng)
        except Exception as e:
            print(f"??  啟動(dòng)應(yīng)用失敗: {e}")
    
    def swipe_up(self):
        """執(zhí)行向上滑動(dòng)"""
        try:
            self.device.shell("input swipe 500 1500 500 500 300")
            self.count += 1
            current_time = datetime.now().strftime('%H:%M:%S')
            print(f"[{self.count}] {current_time} ? 滑動(dòng)成功")
            return True
        except Exception as e:
            print(f"? 滑動(dòng)失敗: {e}")
            return False
    
    def should_continue(self):
        """判斷是否繼續(xù)執(zhí)行"""
        if self.total_count is None:
            return True
        return self.count < self.total_count
    
    def run(self):
        """運(yùn)行自動(dòng)化任務(wù)"""
        if not self.connect_device():
            return
        
        self.start_app()
        
        print(f"\n? 滑動(dòng)間隔: {self.interval} 秒")
        if self.total_count:
            print(f"?? 目標(biāo)次數(shù): {self.total_count} 次")
        else:
            print(f"?? 持續(xù)運(yùn)行(按 Ctrl+C 停止)")
        print("-" * 50)
        
        try:
            while self.should_continue():
                if not self.swipe_up():
                    # 滑動(dòng)失敗,嘗試重連
                    print("?? 嘗試重新連接...")
                    if not self.connect_device():
                        break
                
                if self.should_continue():
                    time.sleep(self.interval)
                    
        except KeyboardInterrupt:
            print("\n\n??  用戶停止")
        finally:
            print(f"\n?? 統(tǒng)計(jì)信息:")
            print(f"   - 總滑動(dòng)次數(shù): {self.count}")
            print(f"   - 運(yùn)行時(shí)間: {self.count * self.interval} 秒")

def main():
    # 命令行參數(shù)解析
    parser = argparse.ArgumentParser(description='手機(jī)自動(dòng)化滑動(dòng)腳本')
    parser.add_argument('-i', '--interval', type=int, default=5, 
                       help='滑動(dòng)間隔(秒),默認(rèn)5秒')
    parser.add_argument('-n', '--count', type=int, default=None,
                       help='滑動(dòng)次數(shù),不指定則無(wú)限循環(huán)')
    parser.add_argument('-p', '--package', type=str, default=None,
                       help='應(yīng)用包名,如:com.ss.android.ugc.aweme(抖音)')
    
    args = parser.parse_args()
    
    # 創(chuàng)建并運(yùn)行自動(dòng)化任務(wù)
    automation = PhoneAutomation(
        interval=args.interval,
        total_count=args.count,
        app_package=args.package
    )
    automation.run()

if __name__ == "__main__":
    main()

四、運(yùn)行指南

4.1 基礎(chǔ)運(yùn)行

默認(rèn)配置運(yùn)行(5秒間隔,無(wú)限循環(huán)):

python auto_swipe.py

4.2 自定義參數(shù)運(yùn)行

設(shè)置間隔為10秒:

python auto_swipe.py -i 10

設(shè)置滑動(dòng)20次后自動(dòng)停止:

python auto_swipe.py -n 20

啟動(dòng)抖音并自動(dòng)滑動(dòng):

python auto_swipe.py -p com.ss.android.ugc.aweme

組合參數(shù)(每8秒滑動(dòng)一次,共50次,啟動(dòng)抖音):

python auto_swipe.py -i 8 -n 50 -p com.ss.android.ugc.aweme

4.3 查看幫助

python auto_swipe.py -h

4.4 停止腳本

運(yùn)行中按 Ctrl + C 即可停止。

五、常見(jiàn)應(yīng)用包名

  • 抖音:com.ss.android.ugc.aweme
  • 快手:com.smile.gifmaker
  • B站:tv.danmaku.bili
  • 微信:com.tencent.mm
  • QQ:com.tencent.mobileqq
  • 微博:com.sina.weibo

查找應(yīng)用包名方法:

# 先打開(kāi)目標(biāo)應(yīng)用,然后執(zhí)行:
adb shell dumpsys window | grep mCurrentFocus

六、調(diào)整滑動(dòng)坐標(biāo)

如果滑動(dòng)效果不理想,需要根據(jù)手機(jī)分辨率調(diào)整坐標(biāo)。

查看手機(jī)分辨率:

adb shell wm size

根據(jù)分辨率調(diào)整:

假設(shè)分辨率為 1080x2400:

# 計(jì)算公式:
# x坐標(biāo) = 屏幕寬度 / 2 = 1080 / 2 = 540
# y1坐標(biāo)(起點(diǎn))= 屏幕高度 * 0.8 = 2400 * 0.8 = 1920
# y2坐標(biāo)(終點(diǎn))= 屏幕高度 * 0.2 = 2400 * 0.2 = 480

# 修改 swipe_up 函數(shù)中的命令為:
device.shell("input swipe 540 1920 540 480 300")

七、故障排查

7.1 “未檢測(cè)到設(shè)備”

解決方案:

# 1. 檢查設(shè)備連接
adb devices

# 2. 重啟 ADB 服務(wù)
adb kill-server
adb start-server

# 3. 檢查驅(qū)動(dòng)(Windows)
# 在設(shè)備管理器中查看是否有黃色感嘆號(hào)

# 4. 重新授權(quán)
# 拔掉 USB 線重新插入,手機(jī)上重新授權(quán)

7.2 “ModuleNotFoundError: No module named ‘ppadb’”

解決方案:

# 確認(rèn) Python 環(huán)境
python --version

# 重新安裝
pip uninstall pure-python-adb
pip install pure-python-adb

7.3 滑動(dòng)無(wú)反應(yīng)

解決方案:

  • 確認(rèn)應(yīng)用已在前臺(tái)運(yùn)行
  • 調(diào)整滑動(dòng)坐標(biāo)(參考第六節(jié))
  • 增加滑動(dòng)時(shí)間:300 改為 500
  • 檢查手機(jī)是否鎖屏

7.4 腳本運(yùn)行卡住

解決方案:

# 檢查 ADB 進(jìn)程
ps aux | grep adb

# 殺掉所有 ADB 進(jìn)程
killall adb

# 重啟 ADB
adb start-server

八、進(jìn)階功能

8.1 添加隨機(jī)間隔

讓滑動(dòng)更像人類操作:

import random

# 在 auto_swipe.py 的 run 方法中修改:
time.sleep(self.interval + random.uniform(-1, 1))

8.2 添加日志文件

import logging

# 在腳本開(kāi)頭添加:
logging.basicConfig(
    filename='swipe_log.txt',
    level=logging.INFO,
    format='%(asctime)s - %(message)s'
)

# 在 swipe_up 方法中添加:
logging.info(f"滑動(dòng)第 {self.count} 次")

8.3 多設(shè)備控制

# 修改 connect_device 方法,支持選擇設(shè)備:
devices = adb.devices()
for i, device in enumerate(devices):
    print(f"{i}: {device.serial}")
choice = int(input("選擇設(shè)備序號(hào): "))
self.device = devices[choice]

九、完整項(xiàng)目結(jié)構(gòu)

phone-automation/
├── test_connection.py      # 測(cè)試連接腳本
├── basic_swipe.py          # 基礎(chǔ)滑動(dòng)腳本
├── auto_swipe.py           # 完整功能腳本
└── swipe_log.txt           # 日志文件(運(yùn)行后生成)

十、總結(jié)

恭喜你完成教程!現(xiàn)在你已經(jīng)掌握:

  • Python + ADB 環(huán)境搭建
  • 手機(jī)連接和授權(quán)
  • 基礎(chǔ)自動(dòng)化腳本編寫(xiě)
  • 完整功能腳本開(kāi)發(fā)
  • 參數(shù)化配置和異常處理

下一步建議:

  • 學(xué)習(xí)更多 ADB 命令(點(diǎn)擊、長(zhǎng)按、輸入文本等)
  • 探索 uiautomator2 進(jìn)行元素定位
  • 研究圖像識(shí)別技術(shù)實(shí)現(xiàn)更智能的自動(dòng)化

以上就是Python利用 ADB工具進(jìn)行手機(jī)自動(dòng)化控制的詳細(xì)內(nèi)容,更多關(guān)于Python ADB手機(jī)自動(dòng)化控制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python報(bào)錯(cuò)too?many?values?to?unpack問(wèn)題及解決

    Python報(bào)錯(cuò)too?many?values?to?unpack問(wèn)題及解決

    這篇文章主要介紹了Python報(bào)錯(cuò)too?many?values?to?unpack問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • python 安裝virtualenv和virtualenvwrapper的方法

    python 安裝virtualenv和virtualenvwrapper的方法

    下面小編就為大家?guī)?lái)一篇python 安裝virtualenv和virtualenvwrapper的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 深入了解Python在HDA中的應(yīng)用

    深入了解Python在HDA中的應(yīng)用

    這篇文章主要介紹了深入了解Python在HDA中的應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python中的自定義函數(shù)學(xué)習(xí)筆記

    Python中的自定義函數(shù)學(xué)習(xí)筆記

    這篇文章主要介紹了Python中的自定義函數(shù)學(xué)習(xí)筆記,本文講解了定義函數(shù)、callable函數(shù)、help函數(shù)等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • 用Pytorch實(shí)現(xiàn)線性回歸模型的步驟

    用Pytorch實(shí)現(xiàn)線性回歸模型的步驟

    線性關(guān)系是一種非常簡(jiǎn)單的變量之間的關(guān)系,因變量和自變量在線性關(guān)系的情況下,可以使用線性回歸算法對(duì)一個(gè)或多個(gè)因變量和自變量間的線性關(guān)系進(jìn)行建模,本文主要介紹了如何利用Pytorch實(shí)現(xiàn)線性模型,需要的朋友可以參考下
    2024-01-01
  • Python3實(shí)現(xiàn)打印任意寬度的菱形代碼

    Python3實(shí)現(xiàn)打印任意寬度的菱形代碼

    這篇文章主要介紹了Python3實(shí)現(xiàn)打印任意寬度的菱形代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python3 selenium自動(dòng)化 下拉框定位的例子

    python3 selenium自動(dòng)化 下拉框定位的例子

    今天小編就為大家分享一篇python3 selenium自動(dòng)化 下拉框定位的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python新手經(jīng)常遇到的17個(gè)錯(cuò)誤分析

    python新手經(jīng)常遇到的17個(gè)錯(cuò)誤分析

    這篇文章主要介紹了python新手經(jīng)常遇到的17個(gè)錯(cuò)誤分析,需要的朋友可以參考下
    2014-07-07
  • 零基礎(chǔ)教你如何使用Python批量發(fā)送郵件

    零基礎(chǔ)教你如何使用Python批量發(fā)送郵件

    在日常工作和學(xué)習(xí)中,我們經(jīng)常會(huì)遇到需要向多人發(fā)送通知、邀請(qǐng)函或工資條的情況,本文將作為一份面向完全零基礎(chǔ)新手的系統(tǒng)性指南,帶你一步步掌握使用Python批量發(fā)送郵件的技能
    2026-04-04
  • OpenCV-Python實(shí)現(xiàn)凸包的獲取

    OpenCV-Python實(shí)現(xiàn)凸包的獲取

    凸包是一個(gè)計(jì)算幾何中的概念,在圖像處理過(guò)程中,我們常常需要尋找圖像中包圍某個(gè)物體的凸包,本文就使用OpenCV實(shí)現(xiàn),感興趣的可以了解一下
    2021-06-06

最新評(píng)論

泰来县| 望奎县| 孝义市| 双鸭山市| 靖州| 惠水县| 鄢陵县| 富源县| 阿坝| 巨鹿县| 临洮县| 嵊州市| 南部县| 娱乐| 莱州市| 阿图什市| 彰化市| 洮南市| 望城县| 台江县| 乐陵市| 赣州市| 静乐县| 绥德县| 都江堰市| 惠水县| 睢宁县| 平遥县| 桐柏县| 额敏县| 宜都市| 嘉兴市| 云林县| 曲沃县| 高密市| 新乡市| 瑞丽市| 遂宁市| 商南县| 酒泉市| 大关县|