python + adb 实现控制手机

主要步骤:

1、USB连接手机,手机打开USB调试模式,小米手机可能还要打开允许通过USB调试修改权限或者模拟点击

2、下载ADB,在adb文件目录下运行cmd,调用相应的adb指令即可对手机模拟操作
3、在python或其他语言java中,也是通过调用cmd shell,运行相应的adb命令实现自动操作的。
主要命令:

以通过如下ADB命令实现PC对Android手机的模拟输入,点击,滑动等事件,进而对Android手机的操作与控制。

1: adb shell input keyevent keycode

   这条命令模拟Android手机按下了event_code对应的按键。

   event_code表如下:

0 -->  "KEYCODE_UNKNOWN"
1 -->  "KEYCODE_MENU"
2 -->  "KEYCODE_SOFT_RIGHT"
3 -->  "KEYCODE_HOME"
4 -->  "KEYCODE_BACK"
5 -->  "KEYCODE_CALL"
6 -->  "KEYCODE_ENDCALL"
7 -->  "KEYCODE_0"
8 -->  "KEYCODE_1"
9 -->  "KEYCODE_2"
10 -->  "KEYCODE_3"
11 -->  "KEYCODE_4"
12 -->  "KEYCODE_5"
13 -->  "KEYCODE_6"
14 -->  "KEYCODE_7"
15 -->  "KEYCODE_8"
16 -->  "KEYCODE_9"
17 -->  "KEYCODE_STAR"
18 -->  "KEYCODE_POUND"
19 -->  "KEYCODE_DPAD_UP"
20 -->  "KEYCODE_DPAD_DOWN"
21 -->  "KEYCODE_DPAD_LEFT"
22 -->  "KEYCODE_DPAD_RIGHT"
23 -->  "KEYCODE_DPAD_CENTER"
24 -->  "KEYCODE_VOLUME_UP"
25 -->  "KEYCODE_VOLUME_DOWN"
26 -->  "KEYCODE_POWER"
27 -->  "KEYCODE_CAMERA"
28 -->  "KEYCODE_CLEAR"
29 -->  "KEYCODE_A"
30 -->  "KEYCODE_B"
31 -->  "KEYCODE_C"
32 -->  "KEYCODE_D"
33 -->  "KEYCODE_E"
34 -->  "KEYCODE_F"
35 -->  "KEYCODE_G"
36 -->  "KEYCODE_H"
37 -->  "KEYCODE_I"
38 -->  "KEYCODE_J"
39 -->  "KEYCODE_K"
40 -->  "KEYCODE_L"
41 -->  "KEYCODE_M"
42 -->  "KEYCODE_N"
43 -->  "KEYCODE_O"
44 -->  "KEYCODE_P"
45 -->  "KEYCODE_Q"
46 -->  "KEYCODE_R"
47 -->  "KEYCODE_S"
48 -->  "KEYCODE_T"
49 -->  "KEYCODE_U"
50 -->  "KEYCODE_V"
51 -->  "KEYCODE_W"
52 -->  "KEYCODE_X"
53 -->  "KEYCODE_Y"
54 -->  "KEYCODE_Z"
55 -->  "KEYCODE_COMMA"
56 -->  "KEYCODE_PERIOD"
57 -->  "KEYCODE_ALT_LEFT"
58 -->  "KEYCODE_ALT_RIGHT"
59 -->  "KEYCODE_SHIFT_LEFT"
60 -->  "KEYCODE_SHIFT_RIGHT"
61 -->  "KEYCODE_TAB"
62 -->  "KEYCODE_SPACE"
63 -->  "KEYCODE_SYM"
64 -->  "KEYCODE_EXPLORER"
65 -->  "KEYCODE_ENVELOPE"
66 -->  "KEYCODE_ENTER"
67 -->  "KEYCODE_DEL"
68 -->  "KEYCODE_GRAVE"
69 -->  "KEYCODE_MINUS"
70 -->  "KEYCODE_EQUALS"
71 -->  "KEYCODE_LEFT_BRACKET"
72 -->  "KEYCODE_RIGHT_BRACKET"
73 -->  "KEYCODE_BACKSLASH"
74 -->  "KEYCODE_SEMICOLON"
75 -->  "KEYCODE_APOSTROPHE"
76 -->  "KEYCODE_SLASH"
77 -->  "KEYCODE_AT"
78 -->  "KEYCODE_NUM"
79 -->  "KEYCODE_HEADSETHOOK"
80 -->  "KEYCODE_FOCUS"
81 -->  "KEYCODE_PLUS"
82 -->  "KEYCODE_MENU"
83 -->  "KEYCODE_NOTIFICATION"
84 -->  "KEYCODE_SEARCH"
85 -->  "TAG_LAST_KEYCODE"

2:adb shell input tap

    这条命令模拟Android手机在屏幕坐标(X,Y)处进行了点击操作。

3:adb shell input swipe  

    这条命令模拟Android手机从屏幕坐标(X1,Y1)滑动到坐标(X2,Y2)的操作。

4、uiautomator dump   dump: creates an XML dump of current UI hierarchy 这个命令是用来成成当前界面的UI层次,并用XML格式进行展示 。这样就可以获取各个组件的位置了

注:如果PC要想同时控制多台Android手机,必须在adb 后面添加-s

例如:adb -s 13b6e4c4 shell input tap 400 400

表示对13b6e4c4这台Android手机进行在屏幕上(400,400)坐标位置进行模拟的点击事件。


举例:

一、直接在cmd中操作手机

1、打开cmd,进入到当前文件夹中,输入命令 adb devices 查看当前与电脑连接的设备(前提是,手机打开usb调试模式),可以查看已连接成功的手机。

2、 若手机成功连接,输入命令 adb shell input tap 100 100 , 表示点击屏幕上坐标为(100,100)的点,如果不知道需要点击的点的具体位置的话可以在手机开发者模式中设置。


二、使用python脚本自动运行cmd 命令

1. 在adb文件夹下建立一个python文件

 
  1.  
    import os
  2.  
     
  3.  
    os.system('adb shell input tap 100 100');

 

运行脚本,发现与在命令行输入相同语句有同样的效果。
2、也可以使用 subprocess.Popen,最简单使用方式如下,设置shell=True,就不会弹出cmd框
process = subprocess.Popen('adb shell input tap 14 1402',shell=True)
 
程序实例:
#coding:utf-8
#程序功能:可以实现抖音个人页面视频的自动点击,从而自动增加访问量
#思路:抖音主页中两个视频切换点击,可以实现访问量的增加
#使用ADB程序,视频的屏幕坐标可以使用adb shell uiautomator dump命令,获取该页面xml源码后查得
#下述是小米MIX2抖音主页第一个视频和第二个视频的坐标位置
#缺点:运行时不能移动屏幕,后续可以采用获取模块ID号的方式去点击相应的位置
import time
import subprocess
i = 0
#每次操作的间隔时间取决于手机配置,配置越高时间越短
sleep_time = 0.5 
while 1:
        #用popen设置shell=True不会弹出cmd框
        process = subprocess.Popen('adb shell input tap 14 1402',shell=True)
        time.sleep(sleep_time)
        process = subprocess.Popen('adb shell input keyevent KEYCODE_BACK', shell=True)
        time.sleep(sleep_time)
        process = subprocess.Popen('adb shell input tap 375 1402', shell=True)
        time.sleep(sleep_time)
        process = subprocess.Popen('adb shell input keyevent KEYCODE_BACK', shell=True)
        time.sleep(sleep_time)
       #os.system('adb shell input tap 14 1402')
        #os.system('adb shell input keyevent KEYCODE_BACK')
        #os.system('adb shell input tap 375 1402')
        i+=1
        print  str(i) + 'clicks have been completed'

猜你喜欢

转载自www.cnblogs.com/moying-wq/p/9997818.html