adb+python实现自动领喵币

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: adb+python实现自动领喵币

今天使用Python+adb 来实现淘宝自动领喵币。

简单说一下adb是什么,adb中文名安卓调试桥。简单来说,可以用它来模拟手机的操作,调试手机等等。

https://developer.android.google.cn/studio/command-line/adb


首先要配置好开发环境,

  1. 安装Python
  2. 安装adb(安装并添加到Path)
  3. 手机打开开发者模式(以小米为例,步骤为:设置–我的设备–全部参数–点击MIUI版本7次(点击时有提示,最后会提示已经进入开发者模式)–更多设置–开发者选项–打开USB调试和USB调试(安全设置)
  4. 使用数据线连接电脑和手机

开发环境配置好了就可以用python调用adb写程序了。程序主要过程就是:1)截图;2)找点;3)点击。没有特别的地方,但是要注意的是,这里我的屏幕是1080*1920的,如果你的屏幕分辨率不一样的话,可能要修改坐标(因为去分享也是红色的,所以程序找点的起点是去分享下面(不然就会一直点去分享))。

#稍微修改了一下2020/5/30 08:38
#需要配置好adb。
#运行前打开淘宝,进入领喵币活动页面。
import os
import time

from PIL import Image

MAX_TIMES = 15  # 自定义最大浏览次数

#用来执行命令,这里加了延迟
def execute_cmd(args):
    DELAY_SECOND = 3#延迟时间, 因为网络和手机响应速度不同,反应慢的可以改大一些。
    time.sleep(DELAY_SECOND) #等待上一步操作响应完成
    os.system(args)


#截图保存到手机上, 上传到电脑上
def screencap():
    execute_cmd('adb shell screencap -p /sdcard/screen.png')
    execute_cmd('adb pull /sdcard/screen.png')

#获取颜色z(rgb)对应的坐标(x,y)
def get_pos(z,x_start=953,y_start=0):
    image = Image.open('screen.png')
    width = image.size[0]
    height = image.size[1]
    for x in range(x_start, x_start+100 if x_start+100<width else width):
        for y in range(y_start,height):
            data = image.getpixel((x,y))[:3]
            if data == z:
                return (x,y)

# 进入领喵币中心
def enter_miaobi_center():
    # 截图
    screencap()
    z = (249, 239, 108)
    pos = get_pos(z)
    execute_cmd('adb shell input tap {} {}'.format(pos[0], pos[1]))

# 浏览店铺
def browse_stores():
    BROWSER_WAIT = 15  #浏览等待15秒
    screencap()
    # z是在'去浏览'图标上取色得到的rgb,用来定位'去浏览'坐标
    z = (237, 46, 67)
    for i in range(0, MAX_TIMES):
        pos = get_pos(z, 790, 1190)
        print(pos)#调试用
        # 点击去浏览
        execute_cmd('adb shell input tap {} {}'.format(pos[0], pos[1]))
        # 下滑浏览,防止第一次没滑动成功,滑动两次
        execute_cmd('adb shell input swipe 900 1500 900 500 200')
        execute_cmd('adb shell input swipe 900 1500 900 500 200')
        print('进入店铺,浏览页面中,请等待15s...')
        time.sleep(BROWSER_WAIT)
        # 返回
        execute_cmd('adb shell input keyevent 4')
    print('END')

if __name__ == '__main__':
    try:
       enter_miaobi_center()
    except:
        print("进入喵币中心失败,可能已经进入领喵币中心,尝试进入浏览页面...")

    try:
       browse_stores()
    except:
        print('浏览失败')

另外,实现找点的方法除了像素点检测,还可以调用opencv的函数matchTemplate来实现。这种方法更加准确(因为它可以匹配一块区域,而不是一个点)。另外这种方法的通用性更好。

有关matchTemplate的文章: https://www.jianshu.com/p/c20adfa72733

import cv2 as cv
import numpy as np
#在target中匹配tpl,
#传入两个图像
#返回中心坐标点
def mathch_center(tpl,target):
    th,tw = tpl.shape[:2] #获取模板图像的高宽
    result = cv.matchTemplate(target, tpl, cv.TM_CCOEFF_NORMED)  # result是我们各种算法下匹配后的图像
    threshold = 0.9    #阈值,1表示完全匹配
    loc = np.where(result>=threshold)
    #返回所有匹配图像的中心点
    for pt in zip(*loc[::-1]):  # *号表示可选参数
        br = (pt[0] + tw, pt[1] + th)  # 右下点
        center = (int)((pt[0] + br[0]) / 2), (int)((pt[1] + br[1]) / 2)
        yield  center

补充一个adb无线连接的方式,只要第一次用数据线连接,之后只要在同一局域网内就可以无线连接了。(参考http://www.aoaoyi.com/archives/738.html#chapter2.3)

2.3、无线连接(需要借助 USB 线)

除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 USB 连接线的限制啦!


操作步骤:


1.将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。


2.将设备与电脑通过 USB 线连接。应确保连接成功(可运行 adb devices 看是否能列出该设备)。


3.让设备在 5555 端口监听 TCP/IP 连接:


adb tcpip 5555

4.断开 USB 连接。


5.找到设备的 IP 地址。


一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到,也可以使用下文里 adb 命令来查看设备信息 – IP 地址 。


6.通过 IP 地址连接设备。


adb connect

这里的 就是上一步中找到的设备 IP 地址。


7.确认连接状态。


相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
2月前
|
Android开发 Python
Python封装ADB获取Android设备wifi地址的方法
Python封装ADB获取Android设备wifi地址的方法
117 0
|
2月前
|
Java 程序员 API
全民上手大模型--ollama+langchain+通义千问零费用java+python跑通本机大模型
全民上手大模型--ollama+langchain+通义千问零费用java+python跑通本机大模型
439 0
|
2月前
|
人工智能 Python
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
165 0
|
8月前
|
API Android开发 开发者
Python读取adb库表限制3000条的问题
Python读取adb库表限制3000条的问题
40 0
|
缓存 IDE 网络协议
盘点Python编程的简易版自动化工具——ADB史上全操作
盘点Python编程的简易版自动化工具——ADB史上全操作
444 0
盘点Python编程的简易版自动化工具——ADB史上全操作
|
安全 Shell 开发工具
ubuntu16.04 使用adb连接Android手机及——python实现看小说自动翻页
ubuntu16.04 使用adb连接Android手机及——python实现看小说自动翻页
ubuntu16.04 使用adb连接Android手机及——python实现看小说自动翻页
|
安全 Shell 开发工具
ubuntu16.04 使用adb连接Android手机及——python实现看小说自动翻页
ubuntu16.04 使用adb连接Android手机及——python实现看小说自动翻页
|
2月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
137 1
|
10月前
|
开发工具 Android开发
Mac 安卓(Android) 配置adb路径
Mac 安卓(Android) 配置adb路径
457 0
|
2月前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
106 5

热门文章

最新文章