63

手把手教你编写抖音自动评论脚本

 5 years ago
source link: https://www.tuicool.com/articles/fuiqaqE
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

0×00 前言

我的TodoList增加了一项,Appium | Airtest 抖音自动评论、创意评论(所有评论/前一百评论男女占比 | 所有评论词云),记录了当时的一个想法。Appium和Airtest都可用于移动端自动化测试,Airtest是网易家的,想做评论词云是因为在这之前用Appium写了一个爬个人微信朋友圈词云图的程序(见图1),同时Airtest操作更简单,也在考虑的范围。

再后来,一直未实施,主要是觉得得用手机连着电脑,不能随时随地操作,就搁置了。近段时间因为工作时的一个想法,又把这事提起来了。业务场景比较特殊,可能会涉及版权问题,就不细说,简言之,想实现某注册机自动生成注册码功能,继而接触到了按键精灵。按键精灵很早就存在,也很早就有所耳闻,但一直未实地接触,刚好借这个机会接触一下。用按键精灵PC版实现了注册机自动生成注册码功能,在实现的过程中接触到了按键精灵手机版,孤陋寡闻了,一个神奇的存在,立马就想到了可以用它先实现个简单的抖音自动评论功能吧。

前言有点啰嗦了。。。,喏,这个是微信朋友圈词云图,图1

ZN73Mnv.jpg!web

演示视频:

0×01 导语

过了前言是导语啊,看了这篇文章,你可以了解到哪些内容:

1. 某注册机自动生成注册码——按键精灵PC版脚本编写

2. 抖音自动评论——按键精灵手机版使用及脚本编写

3. Lua插件使用及编写

4. 拓展功能,看结尾Tips

5. 非技术工作者可以了解到,很多功能表现,没有那么复杂,程序可以代替手工

6. ++

0×02 某注册机自动生成注册码

不是本文重点,会简单概过(Kuo)。按键精灵官网下载地址 http://download.myanjian.com/ ,可下载按键精灵PC版,安卓版,按键精灵手机助手。

Inqy2iM.jpg!web 此处下载安装按键精灵PC端,PC版首页:

zYrIVrF.jpg!web

脚本编写界面(需要注意红色箭头指向的几个地方,了解一下相关功能项):

qAZNzej.jpg!web 学习方式:按键精灵使用的是Q语言,在VBScript语言基础上发展来的,如果对VBScript语言有了解更好一些,没有了解也没关系,注意上图脚本编写界面中的基本命令和全部命令标签,基础命令标签可通过点击自动生成代码,全部命令标签大部分方法通过代入参数也可自动生成代码,把基本命令和全部命令相关方法看一遍,看的过程中就会对要实现的功能有个大概的构思,清楚会用到哪些方法,编写脚本过程中再去官网、其它地方了解下相关知识点,基本就入门了。

小Tips:

1. 界面标签页可编写窗体界面,包含各种控件。
2. 发布菜单可导出脚本,脚本依赖PC版运行环境;可制作按键小精灵,按键小精灵可生成exe程序,脱离PC版运行环境独立运行。
3. 善用命令帮助文档和命令搜索功能

某注册机自动生成注册码,主要用到了Window窗口插件里的方法,同时也用到了抓抓功能,通过动态找窗口句柄的方式实现具体的功能,Plugin.Window.FindEx( )函数有坑,需要在实践过程中理解参数2子窗口句柄的用法。 其它没有介绍到的,如有疑问,欢迎交流。

某注册机自动生成注册码代码示例(如有更好实现方式,欢迎指导,谢谢):

Dim MachineCode, SerialNum, RegistCode
//打开注册机
Call RunApp("D:\SoftWare\keygen.exe")
Delay 500
//接收机器码
Rem InputMach
MachineCode = InputBox("请输入机器码:", "输入注册码")
If MachineCode = "" Then
Goto InputMach
End If
TracePrint "MachineCode: " & MachineCode 
//查找窗口类名("#32770")或者标题("Keymaker"),返回找到的句柄Hwnd
Hwnd = Plugin.Window.Find("#32770", "Keymaker")
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Edit")或者匹配标题(""),返回找到匹配的句柄MachineIdEx
MachineIdEx = Plugin.Window.FindEx(Hwnd, 0, "Edit", 0)
TracePrint "MachineIdEx: " & MachineIdEx
//修改Keymaker标题
Call Plugin.Window.SetText(Hwnd,"注册码自动生成")
//自动输入机器码
Call Plugin.Window.SendString(MachineIdEx, MachineCode)
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Button")或者匹配标题("&Generate"),返回找到匹配的句柄GenerateEx
GenerateEx = Plugin.Window.FindEx(Hwnd, 0, "Button", "&Generate")
TracePrint "GenerateEx: " & GenerateEx
//按下Generate按钮,生成注册码
Call Plugin.Window.SendKeyDown(GenerateEx, 13)
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Static")或者匹配标题("Your machine ID:"),返回找到匹配的句柄MachineIdLabelEx
MachineIdLabelEx = Plugin.Window.FindEx(Hwnd, 0, "Static", "Your machine ID:")
TracePrint "MachineIdLabelEx: " & MachineIdLabelEx
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Edit")或者匹配标题(""),返回找到匹配的句柄SerialNumEx
SerialNumEx = Plugin.Window.FindEx(Hwnd, MachineIdLabelEx, "Edit", 0)
TracePrint "SerialNumEx: " & SerialNumEx
//获取序列号
SerialNum = Plugin.Window.GetTextEx(SerialNumEx, 1)
TracePrint "SerialNum: " & SerialNum
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Button")或者匹配标题(""),返回找到匹配的句柄ButtonFrameEx
ButtonFrameEx = Plugin.Window.FindEx(Hwnd, 0, "Button", 0)
TracePrint "ButtonFrameEx: " & ButtonFrameEx
//根据父窗口句柄(Hwnd)查找子窗口匹配类名("Edit")或者匹配标题(""),返回找到匹配的句柄RegistCodeEx
RegistCodeEx = Plugin.Window.FindEx(Hwnd, ButtonFrameEx, "Edit", 0)
TracePrint "RegistCodeEx: " & RegistCodeEx
RegistCode = Plugin.Window.GetTextEx(RegistCodeEx, 1)
TracePrint "RegistCode: " & RegistCode
MsgBox "序列号:" & SerialNum & " 注册码:" & RegistCode
//复制序列号和注册码到剪切板
Call Plugin.Sys.SetCLB("机器码:" & MachineCode & " 序列号:" & SerialNum & " 注册码:" & RegistCode)
MsgBox "注册码信息已复制到剪切板"
Delay 1000
//完全关闭窗口(退出程序)
Call Plugin.Window.CloseEx(Hwnd)

初版运行示例:

VfUnauv.jpg!web

0×03 抖音自动评论——古诗词版

顾名思义,评论的内容是古诗词版的,为嘛,我是文学社社长[/手动滑稽脸],首先就想到来点清流版的。演示视频里用到的是搜狗输入法小汪版,评论内容更万金油一些,嗯。

先下载安装上述提到的按键精灵手机助手,敲黑板,手机助手编写的脚本安卓手机和苹果手机都可以使用,前置条件是安卓需要ROOT,苹果需要越狱。脚本上可能会有一些差别,看具体的方法两个端是否都支持,安卓支持更全一些。

本文演示手机是苹果越狱机,机型:iPhone 6S Plus,安卓机需要各位看官自行尝试。

除了在电脑上安装按键精灵手机助手,还需要在苹果越狱机上安装按键精灵越狱插件,按键精灵Cydia官方源地址: http://apt.mobileanjian.com ,在Cydia中添加按键精灵官方源之后,按iOS对应系统版本安装对应的按键精灵插件:

BbArA3r.jpg!web

之后手机通过数据线连接电脑,打开按键精灵手机助手,即可连接上手机编写脚本。

手机助手编写脚本界面(需要注意红色箭头指向的几个地方,了解一下相关功能项):

6buuEfe.jpg!web

按键精灵手机助手学习方法:和PC版类似,先熟悉界面、菜单功能项,手机助手操作方式,移动端按键精灵操作方式,最重要熟悉基本命令和全部命令,全部看完一遍,即可对要实现的功能有一个大概的构思,明确会用到哪些命令方法。

抖音自动评论脚本编写思路(流程):

1. 按下Home键,然后自动打开抖音App

基本命令——触摸命令——按键 Home——插入,即可生成按下Home键的代码,

基本命令——其它命令——应用程序 启动——包名找到抖音,即可生成打开抖音App代码

如下(注意延时2秒,防止RunApp闪退,实践得知):

//按下Home键
KeyPress "Home"
//延时2秒,防止RunApp闪退
Delay 2000
//打开抖音
RunApp "com.ss.iphone.ugc.Aweme"

2. 模拟上滑切换视频,随机延时模拟人为观看视频

基本命令——从屏幕x1,y1坐标滑动到x2,y2坐标,可通过两组坐标模拟某个方向的滑动操作,坐标点需要通过屏幕分辨率计算,两组坐标x轴相同,y轴从小到大即为上滑操作。

基本命令——设备命令——得到屏幕宽度、得到屏幕高度,即可得到屏幕分辨率,宽×高,

基本命令——其它命令——延时x毫秒时间,即可延时执行,随机延时需计算实现

整理代码如下(TracePrint方法,控制台调试输出):

//获取屏幕分辨率
Dim screenX, screenY
screenX = GetscreenX()
screenY = GetscreenY()

//生成指定范围随机数
Function GenRnd(minVal, maxVal)
	GenRnd = Int((maxVal - minVal + 1) * Rnd() + minVal)
End Function

//随机延时
Function DelayRnd(minSec, maxSec)
	Dim randTime
	randTime = GenRnd(minSec, maxSec)
	TracePrint "随机延时" & randTime & "秒"
	Delay randTime * 1000
End Function

//上划切换视频
Function SwipeUp(screenX, screenY)
    //整除运算符计算从屏幕中间底部划到顶部,划动延时为30毫秒
	Swipe screenX \ 2, screenY * 0.65 \ 1, screenX \ 2, screenY * 0.35 \ 1, 30
	//调试输出结果,例:621 1766 621 442 30
	TracePrint(screenX \ 2, screenY * 0.8 \ 1, screenX \ 2, screenY * 0.2 \ 1, 30)
	//随机延时3到15秒
	DelayRnd(3, 15)
End Function

3. 找评论按钮,点击评论按钮

找评论按钮需要用到抓抓菜单,找到评论按钮在屏幕中的坐标点:

niEZjqr.jpg!web 先点左上角截屏,即可加载当前抖音视频屏幕截图,滑动滚轴找到评论按钮,鼠标放到中心点,显示的坐标点即为评论按钮的坐标点,

问:这里是否有其它不依赖坐标点的方法,有,了解一下以图搜图功能,需要截取评论按钮Icon,放到附件里,通过代码在当前屏幕中搜索评论按钮截图的位置。

基本命令——短暂点击屏幕——代入x,y坐标点,即可点击屏幕某一坐标

整理代码:

//查找并点击评论按钮坐标,暂定1150×1440
Tap 1150, 1440

点击评论按钮后示例:

7bQZNzv.jpg!web 4. 点击左下角评论输入框,调接口获取评论内容,自动输入评论内容,点发送按钮

4-1. 按照上述找评论按钮方法,找评论输入框大概坐标区域,因为是在屏幕底部偏左区域(见上图红色圈注),故通过屏幕高度计算得出大概坐标点:

//点击评论框
Tap 80, screenY - 80

评论框展开示例(红色圈注区域为输入评论内容区域,已自动获取焦点):

3aqYVnq.jpg!web 4-2. 调接口获取评论内容,这里需要用到Get或Post方法,请求接口获取返回数据,全部命令——Url网络操作——以Get|Post方式访问地址,即可满足普通不需要Cookie的接口,需携带Cookie,请参考:全部命令——插件命令——ShanHai 山海插件命令v2.5——Get|Post访问HTTP资源(附带cookie),或其它插件。

这里找到了一个古诗词的接口, https://api.77sec.cn/yiyan/api.php ,访问即可随时返回一句古诗词,例如:

document.write("往者不可谏,来着犹可追。——《论语·微子》");

带有js代码,需提取文字部分,有两种方法,使用正则提取,或者使用字符串替换,替换document.write(“和”);为空。

调接口示例:

Dim html, content
// 返回结果示例: document.write("居安思危,思则有备,有备无患。——《左传》");
html = URL.Get("https://api.77sec.cn/yiyan/api.php")
TracePrint html

使用字符串替换提取古诗词内容:

content = Replace(html, "document.write(""", "")
content = Replace(content, """);", "")

使用正则提取,这个地方需注意一下,可以了解到Lua插件使用、Lua插件正则和普通正则的区别、Lua插件编写方法等。

普通正则提取文字:

/\("(.+?)"\)/g

使用ShanHai 山海插件命令v2.5——RegexFind全局正则匹配提取:

//引用插件,按键精灵手机助手自带,对应目录"按键精灵\按键精灵手机助手\Plugin\ShanHai.lua"
Import "shanhai.lua"

Dim regexArr = shanhai.RegexFind(html,"%(\"(.+)\"%)")
For Each v In regexArr
    content = v
Next
TracePrint content

刚开始以为shanhai.RegexFind( )正则参数传入普通的正则表达式即可,调试无结果,然后看了ShanHai.lua插件源码,发现需要使用Lua正则表达式,继而学习了解了其表达式写法,参考lua高级-正则表达式。

小Tip:如果是自己写的插件,脚本代码中怎么引用?PC端和手机端放到对应的Plugin目录下,Import引用即可。

4-3. 自动输入评论内容,按照4-1找到的评论框展开红色圈注区域,已自动获取焦点,使用InputText( )方法即可实现自动输入评论内容:

//输入评论内容
InputText content

Mr2u2ui.jpg!web

4-4. 点发送按钮,此处用的是搜狗输入法,发送按钮在右下角,可通过屏幕分辨率算坐标,也可用抓抓功能取中心坐标点,此处坐标暂定1107×2125:

//点击搜狗输入法发送按钮,坐标暂定1107×2125
Tap 1107, 2125

5. 关闭屏幕区域,以便进行下一次操作

有两种关闭方式,第一种点屏幕区域右上角×号,第二种点评论区域与屏幕顶部间隔区域(会误点通知消息,不推荐)

//关闭评论,点击评论区右上角×号,坐标暂定1169×655
Tap 1169, 655
或
//关闭评论,点屏幕上顶部即可
Tap screenX \ 2, screenY * 0.1 \ 1

经过以上操作即可完成抖音短视频自动评论功能,每步操作可通过点击调试菜单在手机上运行调试。剩下的就是进行循环操作。

0×04  按键精灵越狱插件使用

按键精灵手机助手每次预览界面、调试运行脚本时会自动同步界面、代码到手机端按键精灵App里,默认在底部脚本——未分类文件夹里,打开后即可看到手机助手编写的脚本:

BzANzqv.jpg!web

点击脚本即可进入到脚本配置界面:

IruYrm6.jpg!web

脚本名称和使用说明可在手机助手——脚本——脚本属性里设置,我这个简单,使用说明就一句话,”老省事了,开启后别动手机就成”。

脚本设置相关配置项需要通过手机助手——界面进行设计,配置项变量可在代码中通过ReadUIConfig(界面配置项名称, 默认值)获取。

手机助手界面(见上图预览效果):

eeIfAfN.jpg!web 取评论次数配置项代码示例:

Dim commentTimes
commentTimes = CInt(ReadUIConfig("commentTimes", 10)) //CInt() 尝试将表达式转换为短整数型,如未取到值,默认10次

设置后点加载按钮即可运行脚本,有两种控制方式,一种是按键精灵悬浮图标控制,一种是音量加减控制,加运行,减停止运行,可在按键精灵App设置菜单里进行设置。

脚本配置界面图例右上角编辑按钮可在手机上查看脚本内容,并可实时修改保存运行,即可独立运行。

0×05 抖音自动评论——古诗词版脚本源码

源码中还有很多上述没有提到的地方,包括不限于基础语法,循环操作,封装方法等,可通过代码注释做一了解。

//导入ShanHai 山海插件命令v2.5插件
Import "shanhai.lua"
//获取屏幕分辨率
Dim screenX, screenY
screenX = GetscreenX()
screenY = GetscreenY()
//调试输出结果,例:1242×2208
TracePrint "屏幕分辨率: " & screenX & "×" & screenY
//按下Home键
KeyPress "Home"
//延时2秒,防止RunApp闪退
Delay 2000
//打开抖音
ShowMsg "打开抖音", screenX, screenY

RunApp "com.ss.iphone.ugc.Aweme"
Delay 5000

//获取界面设置的评论次数
Dim content
Dim i, commentTimes
commentTimes = CInt(ReadUIConfig("commentTimes", 10)) //CInt() 尝试将表达式转换为短整数型 
ShowMsg "评论次数配置为" & commentTimes & "次", screenX, screenY
For i = 1 To commentTimes
	//上划切换视频
	SwipeUp screenX, screenY
	TracePrint "第" & i & "次评论"
	ShowMsg "第" & i & "次评论", screenX, screenY

	//获取评论内容
	content = GetPoetry()
	ShowMessage "评论内容:" & content, 2000, screenX * 0.05 \ 1, screenY * 0.75 \ 1
	//自动评论
	Comment screenX, screenY, content
Next


//--------------------------------------------------------------------------------------------
//上划切换视频
Function SwipeUp(screenX, screenY)
    //整除运算符计算从屏幕中间底部划到顶部,划动延时为30毫秒
	Swipe screenX \ 2, screenY * 0.65 \ 1, screenX \ 2, screenY * 0.35 \ 1, 30
	//调试输出结果,例:621 1766 621 442 30
	TracePrint(screenX \ 2, screenY * 0.8 \ 1, screenX \ 2, screenY * 0.2 \ 1, 30)
	//随机延时3到15秒
	DelayRnd(3, 15)
End Function

//自动评论
Function Comment(screenX, screenY, content)
	//查找并点击评论按钮坐标,暂定1150×1440
	Tap 1150, 1440
	DelayRnd(3, 8)
	//点击评论框
	Tap 80, screenY - 80
	//输入评论内容
	InputText content
	Delay 1000
	//点击搜狗输入法发送按钮,坐标暂定1107×2125
	Tap 1107, 2125
	Delay 2000
	//关闭评论,点屏幕上顶部即可
	//Tap screenX \ 2, screenY * 0.1 \ 1
	//关闭评论,点击评论区右上角×号,坐标暂定1169×655
    Tap 1169, 655
	Delay 1000
End Function

//获取一句随机古诗词作为评论内容
Function GetPoetry()
	Dim html, content
	// 返回结果示例: document.write("居安思危,思则有备,有备无患。——《左传》");
	html = URL.Get("https://api.77sec.cn/yiyan/api.php")
	TracePrint html
//	content = Replace(html, "document.write(""", "")
//	content = Replace(content, """);", "")
	Dim regexArr = shanhai.RegexFind(html,"%(\"(.+)\"%)")
	For Each v In regexArr
		content = v
	Next
	TracePrint content
	GetPoetry = content
End Function

//生成指定范围随机数
Function GenRnd(minVal, maxVal)
	GenRnd = Int((maxVal - minVal + 1) * Rnd() + minVal)
End Function

//随机延时
Function DelayRnd(minSec, maxSec)
	Dim randTime
	randTime = GenRnd(minSec, maxSec)
	TracePrint "随机延时" & randTime & "秒"
	Delay randTime * 1000
End Function

//重写ShowMessage
Function ShowMsg(msg, screenX, screenY)
	Dim intX, intY
	intX = screenX \ 2 - 85
	intY = screenY * 0.75 \ 1
	TracePrint "提示消息坐标: " & intX & "×" & intY
	ShowMessage msg, 2000, intX, intY
End Function

0×06 Tips

OK,各位看官,相信经过上述一番文字图片轰炸(LuoSuo),应该可以上手按键精灵做一些事情了吧。当然我接触的也只是皮毛,学无止境,当有一个新想法时,可能会再接触到更多的东西。除了上述实现的抖音自动评论,还可以做哪些事情呢,我简单列几项,不细说,如果你有这方面需求,很快可以想到。

1. 按键精灵手机版是可以操作很多基础功能的,打电话、读发短信等等,所以,脚本源码还好,用别人封装好的不一定是安全的

2. 可以实现批量添加、删除、清空联系人,具体用途自己想

3. 插件编写,看一下按键精灵自带的插件源码,就可以写自定义插件实现更强大的功能

4. 还是++

0×07 结语

做一个有态度的技术工作者。

恭祝大家2020新年好,这可能是最早的新年祝福。

*本文原创作者:冰海,本文属FreeBuf原创奖励计划,未经许可禁止转载


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK