爱收集资源网

抖音点赞 Python+ADB:让人生更简单

网络 2023-08-09 11:08

原文发表在:陌陌公众号【老潘家的潘老师】

项目github地址:

目录

为何要做这个呢?

在各种直播平台,都有对主播点赞的功能,有一些直播平台(比如天猫直播)的点赞按键是可以无限点击的(为何要双击666,明明可以无限击)。在天猫直播中,主播看见自己收获好多赞以后,有几率放一些粉丝福利,个别福利是以中奖为方式的,粉丝们在互动区疯狂发送关键字,主播随机截图,并给在截图中的粉丝送出福利。这个过程须要粉丝疯狂的点赞,以及实时盯住屏幕以防哪些时侯开始刷屏中奖。如果全程亲自操作,借助自己自动点击的话,不能解放右手,是十分拉低做事效率的。假如借助自己盯住屏幕看,也是极其原始的做法。

所以,假若能有一个自动点赞+手动窥屏的外挂将会让我们在薅羊绒的路上满载而归。

鉴于之前早已有朋友实现了手动挖掘抖音美眉的案例,所以这个看法总算有了一丝付诸实践的曙光,潘老师和那位朋友一样使用了Python+ADB的方法来实现。

Python你们都很熟悉,人生苦短,我用Python。

ADB(AndroidDebugBridge)则是一种通过笔记本调试控制安卓设备的技术,我可以在笔记本上输入指令,达到和手工操作一样的疗效(例如说我可以用笔记本控制安卓手机点开某个应用,点击某个按键等等)。如同开了外挂一样凉爽。

(前期打算工作须要安装:Python环境,opencv,pillow,ADB并配置好环境变量,免费注册一个百度文本辨识的帐号)

自动点赞获取点击的位置

我想晓得点击了屏幕以后,这个点的位置是多少,该怎么操作?

首先联接笔记本与手机,手机打开USB调试,接着在笔记本上打开cmd输入

adb shell getevent

这时cmd会等待点击。

我点击了按键上a字母的位置,cmd给出了以下信息。找到下边的信息,最后位置的十六补码数就是座标,换算成十补码即可。

/dev/input/event4: 0003 0035 XXXXXXXX
/dev/input/event4: 0003 0036 YYYYYYYY

自动点赞

首先,ADB句子控制点击屏幕上某一点的指令是:

adb shell input tap 123 456

其中的123456是点击位置的座标,这个座标可以通过上一节形式获取。经过测试,天猫直播的右下角点赞按键座标大约是(1015,1730)。

为了防止让天猫认为这个操作太机器人,所以不让他每次都点击到这个固定点,让他随机出现一个偏斜(即使仔细想想似乎这样做也没哪些意义)。

为了始终点下去,加一个循环进去,使用for循环,可以指定给主播点多少个赞。同样地,为了不让天猫认为点击速率太均匀,加入一个随机的延后。点赞主要的部份就是如下代码了:

赞呗抖音点赞_抖音点赞_抖音点个赞

import os
import time
import random
def click_hearts(i):
    delay = random.uniform(0.1, 0.5)
    time.sleep(delay)
    randomX = str(random.randint(-15, 15) + 1015)
    randomY = str(random.randint(-20, 20) + 1730)
    cmd = 'adb shell input tap ' + randomX + ' ' + randomY
    os.popen(cmd)
    print('%s%d, %s%f%s, %s(%s,%s)'%('已点赞 X', i, '延迟', delay, 's',
          '点击坐标:', randomX, randomY))
          
for i in range(1,21): # 自动点赞20次
    click_hearts(i)

实际测试一下,我们先使用这个方式点一点鼠标上的a字母瞧瞧:

嗯还是可以的。

检查有没有中奖获取屏幕

ADB截取屏幕的指令是:

adb shell screencap -p /sdcard/autolottery.png

其中-p前面接的是储存的路径和文件名。

ADB把文件从手机中拷贝下来的指令是:

adb pull /sdcard/autolottery.png ./img

第一个路径是手机中文件的路径和文件名,后一个路径是储存在笔记本中的路径,./img表示存在当前py文件目录下的img文件夹里。

在python中给Android发送ADB指令则通过调用系统cmd实现,让python帮你把顿号上面的诗句输进cmd而且执行:

抖音点个赞_抖音点赞_赞呗抖音点赞

def get_screen():
    os.system('adb shell screencap -p /sdcard/autolottery.png')
    os.system('adb pull /sdcard/autolottery.png ./img')

截图预处理

因为直接用来截图进行文本辨识,正确率较低(经过测试实际是极其低了),所以须要对源图象处理一下。这儿须要安装opencv和pillow。

首先剪裁出文本区域,尽量除去干扰。

import cv2
from PIL import Image
def cut_image():
    # 裁出文字识别区
    image = Image.open('img/autolottery.png')
    box1 = (0, 1100, 800, 1700) #设置图像裁剪区域(left, upper, right, lower)
    image1 = image.crop(box1)
    image1.save('img/textarea.png')

之后将该区域二值化,提高辨识率,因为要辨识的文字部份颜色是白色,所以阀值可以设的大一些:

def extract_text():
    # 图像分割
    image = cv2.imread("img/textarea.png")
    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 转灰度图
    (T, threshInv) = cv2.threshold(image, 230, 255, cv2.THRESH_BINARY_INV) # 反阈值化,阈值为215
    cv2.imwrite('img/textextract.png', threshInv)

原图:

处理后:

文本辨识

二话不说,直接怼百度的文本辨识。百度虽然是汉语起家,辨识汉语的确切度还是很高的

赞呗抖音点赞_抖音点赞_抖音点个赞

from aip import AipOcr
# 配置百度AipOcr
APP_ID = '自己去注册'
API_KEY = '自己去注册'
SECRET_KEY = '自己去注册'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
def baidu_ocr_text():
    # 百度文本识别AipOcr
    image = open('img/textextract.png', 'rb').read()
    msg = client.basicGeneral(image)
    text = 'result:\n'
    for i in msg.get('words_result'):
        text += (i.get('words') + '\n')
    print(text)
    return text

看一下辨识里面图片的结果:

在辨识繁体英文的同时,不耽搁辨识数字,实际上辨识英文的同时英语字母也可以辨识并且确切率低一些。

字符串与子串

这些基本算法(虽然潘老师算法很渣)就不须要解释好多了,送分题。

def string_lottery(m_str, sub_str):
    count = 0
    # 第一层循环,从主字符串的第0个元素开始
    # 第二层循环,通过切片获取下标从i开始与子字符串长度一致的字符串,并与字符串比较,如果等于子字符串则count+1
    for i in range(len(m_str)-1):
        if m_str[i:i+len(sub_str)] == sub_str:
            count += 1
    return count

组装

当我们有了获取屏幕,而且辨识其英文本的能力,那就让他手动为我们检查有没有出现中奖抓手,依据经验,假如屏幕中有4条以上中奖关键字,证明中奖要开始了,你们已然焦躁上去了,所以要让刚才辨识出的那串文本里出现“指定关键字”这个子字符串数目小于等于4即可。

直接怼,不解释:

import ctypes
while 1:
    get_screen()
    cut_image()
    extract_text()
    text = baidu_ocr_text()
    string_count = string_lottery(text, "抽奖")
    if string_count >= 4:
        ctypes.windll.user32.MessageBoxW(0, '要抽奖了,关键词出现次数:'
             + str(string_count), '抽奖了', 0)
        break

由于目前时间主播还没有播出,所以先自己拿备忘录打几个字试试。

抖音点赞_抖音点个赞_赞呗抖音点赞

实际测试

悲哀的事情发生了,测试的时侯发觉主播早已调整了中奖方法,多数奖品用随机放出的“狂戳福利按键”送出了,下午只出了一次刷屏中奖的方式。所以,这件事情告诉我们,产品研制就是在和时间赛跑。

所以,上次开发手动检查“狂戳福利按键”并手动狂戳的外挂?

实际测试疗效(关键字:“有草”):

在这个外挂的辅助下,潘老师还是没有抽到奖,其实这就是,非命不改。

总结

运气差这些事,用python都挽救不了。

虽然单看这个外挂还是有好多成长空间的,比如:

【点赞】可以先测量用户点击的座标,接受并传递给代码里的座标。节约事先查坐标的时间和精力。

【抽奖】可以改建关键字的部份,不须要自动指定关键字,智能辨识刷屏的字符串。此外还可以添加手动打字参与刷屏,以及手动检查中奖结果,实现全手动无人值守式中奖。

抖音点赞