Python+ADB实现自动点赞和文字识别
原文发表在:微信公众号【老潘家的潘老师】
项目github地址:https://github.com/divertingPan/Auto_Lottery
目录
为什么要做这个呢?
自动点赞
获取点击的位置
自动点赞
检测有没有抽奖
获取屏幕
截图预处理
文本识别
字符串与子串
组装
实际测试
总结
为什么要做这个呢?
在各类直播平台,都有对主播点赞的功能,有一些直播平台(例如淘宝直播)的点赞按钮是可以无限点击的(为什么要双击666,明明可以无限击)。在淘宝直播中,主播看到自己收获很多赞之后,有概率放一些粉丝福利,某些福利是以抽奖为形式的,粉丝们在互动区疯狂发送关键字,主播随机截图,并给在截图中的粉丝送出福利。这个过程需要粉丝疯狂的点赞,以及实时盯着屏幕以防什么时候开始刷屏抽奖。如果全程亲自操作,依靠自己手动点击的话,不能解放双手,是非常拉低做事效率的。如果依靠自己盯着屏幕看,也是非常原始的做法。
所以,如果能有一个自动点赞+自动窥屏的外挂将会让我们在薅羊毛的路上满载而归。
鉴于之前已经有同学实现了自动挖掘抖音美女的案例,所以这个想法终于有了一丝付诸实践的曙光,潘老师和这位同学一样使用了Python+ADB的方式来实现。
Python大家都很熟悉,人生苦短,我用Python。
ADB(Android Debug Bridge)则是一种通过电脑调试控制安卓设备的技术,我可以在电脑上输入指令,达到和手工操作一样的效果(比如说我可以用电脑控制安卓手机点开某个应用,点击某个按钮等等)。仿佛开了外挂一样舒爽。
(前期准备工作需要安装: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
其中的123 456是点击位置的坐标,这个坐标可以通过上一节方式获取。经过测试,淘宝直播的右下角点赞按钮坐标大概是(1015, 1730)。
为了避免让淘宝觉得这个操作太机器人,所以不让他每次都点击到这个固定点,让他随机出现一个偏移(虽然仔细想想好像这样做也没什么意义)。
为了一直点下去,加一个循环进去,使用for循环,可以指定给主播点多少个赞。同样地,为了不让淘宝觉得点击速度太均匀,加入一个随机的延迟。点赞主要的部分就是如下代码了:
import os
import time
import randomdef 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 + ' ' + randomYos.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 Imagedef 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) # 反阈值化,阈值为215cv2.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():# 百度文本识别AipOcrimage = 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+1for i in range(len(m_str)-1):if m_str[i:i+len(sub_str)] == sub_str:count += 1return count
组装
当我们有了获取屏幕,并且识别其中文本的能力,那就让他自动为我们检测有没有出现抽奖契机,根据经验,如果屏幕中有4条以上抽奖关键字,证明抽奖要开始了,大家已经躁动起来了,所以要让刚刚识别出的那串文本里出现“指定关键字”这个子字符串数量大于等于4即可。
直接怼,不解释:
import ctypeswhile 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都拯救不了。
其实单看这个外挂还是有很多成长空间的,例如:
【点赞】可以先检测用户点击的坐标,接受并传递给代码里的坐标。节省事先查坐标的时间和精力。
【抽奖】可以改造关键字的部分,不需要手动指定关键字,智能识别刷屏的字符串。再者还可以添加自动打字参与刷屏,以及自动检测抽奖结果,实现全自动无人值守式抽奖。
Python+ADB实现自动点赞和文字识别相关推荐
- python语言翻译成中文-Python 神工具包!翻译、文字识别、语音转文字统统搞定...
原标题:Python 神工具包!翻译.文字识别.语音转文字统统搞定 今天给大家介绍一款 Python 制作的实用工具包,包含多种功能: 音频转文字 文字转语音 截图 OCR文字识别 复制翻译 举个例子 ...
- python实现qq自动点赞_Python实现QQ自动点赞
用python做一个QQ自动点赞神器,上代码: 1 def QQZan(qq): 2 browser = webdriver.chrome() 3 browser.maximize_window() ...
- Python 神工具包!翻译、文字识别、语音转文字统统搞定
今天给大家介绍一款 Python 制作的实用工具包,包含多种功能: 音频转文字 文字转语音 截图 OCR文字识别 复制翻译 举个例子,比如截图 OCR 文字识别就有很多实用场景. 常会遇到有些 PDF ...
- python语音翻译-Python 神工具包!翻译、文字识别、语音转文字统统搞定
今天给大家介绍一款 Python 制作的实用工具包,包含多种功能:音频转文字 文字转语音 截图 OCR文字识别 复制翻译 举个例子,比如截图 OCR 文字识别就有很多实用场景. 常会遇到有些 PDF ...
- python朋友圈自动点赞_python自动点赞功能的实现思路
1.思路 通过pyautogui可以实现鼠标点击.滚动鼠标.截屏等操作.由此功能实现打开页面,进行点赞. aircv可以从大图像获得小图像的位置,利用pyautogui截屏得到的图片,可以在页面获取到 ...
- Python调用百度OCR实现图片文字识别
百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...
- python+adb实现自动刷抖音视频
安装adb和驱动 python代码实现 效果展现 安装adb和驱动 adb下载链接:https://pan.baidu.com/s/1nvhgoOMzPkxqhzLjfkuaTQ 提取码:23a7 a ...
- python手机端自动点赞软件_python自动点赞功能的实现思路
python自动点赞功能的实现思路 发布时间:2020-10-26 10:40:04 来源:脚本之家 阅读:92 1.思路 通过pyautogui可以实现鼠标点击.滚动鼠标.截屏等操作.由此功能实现打 ...
- 女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具
导语 有一天和女朋友聊天,翻着手机上的软件,看电影.看编程网站, 她说到:"这么多 APP,怎么就没一个做文字识别很方便的呢? 我经常读书读到一段话想把它摘抄下来,可是这些软件不是打开进入文 ...
最新文章
- Flutter调试技巧总结——高效开发的秘密
- OpenKruise v1.1:功能增强与上游对齐,大规模场景性能优化
- eshop.sql(复制的时候注意路径!!!)
- 微信小程序-配置请求合法域名的问题以及豆瓣api问题
- 谷歌技术quot;三宝quot;之MapReduce
- 《算法基础》——3.5 链表算法
- 怎样把DataSet转换成ArrayList
- OpenCV Mat类的convertTo函数,数据类型转换
- 计算机的主要元器件介绍,计算机基础电子元器件介绍
- android手机安装win10,安卓手机成功安装运行桌面版win10系统
- Android 开发中渐变背景的简单使用
- Matlab之使用linearization估计人口数量
- execute、executeQuery、executeUpdate的用途及返回值
- 苹果手机充值显示服务器繁忙,iTunes充值常见错误和解决方法
- visual studio 2019安装教程(详细的很)
- 【VOLTE】SIP leg
- 无法将“pytest”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
- java基于微信小程序的竞赛报名管理系统
- ABAQUS几何非线性问题:薄板大变形(如何定义材料方向)
- 神经网络算法的关键参数,神经网络输入输出计算