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


    0×00 前言

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

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

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

    朋友圈词云图.jpg

    演示视频:

    0×01 导语

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

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

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

    3. Lua插件使用及编写 

    4. 拓展功能,看结尾Tips

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

    6. ++

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

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

    按键精灵官网下载地址.png此处下载安装按键精灵PC端,PC版首页:

    按键精灵PC首页.png

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

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

    小Tips:

    1. 界面标签页可编写窗体界面,包含各种控件。

    2. 发布菜单可导出脚本,脚本依赖PC版运行环境;可制作按键小精灵,按键小精灵可生成exe程序,脱离PC版运行环境独立运行。

    3. 善用命令帮助文档和命令搜索功能

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

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

    Dim MachineCode, SerialNum, RegistCode
    //打开注册机
    Call RunApp("D:SoftWarekeygen.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)

    初版运行示例:

    注册机自动生成注册码运行示例.png

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

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

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

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

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

    Cydia按键精灵源.png

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

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

    手机助手脚本界面.png

    按键精灵手机助手学习方法:和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. 找评论按钮,点击评论按钮

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

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

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

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

    整理代码:

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

    点击评论按钮后示例:

    点击评论按钮.png4. 点击左下角评论输入框,调接口获取评论内容,自动输入评论内容,点发送按钮

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

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

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

    评论框展开.png4-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全局正则匹配提取:

    //引用插件,按键精灵手机助手自带,对应目录"按键精灵按键精灵手机助手PluginShanHai.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

    评论框自动输入.png

    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里,默认在底部脚本——未分类文件夹里,打开后即可看到手机助手编写的脚本:

    按键精灵脚本.png

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

    按键精灵脚本设置界面.png

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

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

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

    手机助手界面编写.png取评论次数配置项代码示例:

    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. 还是++

  • 相关阅读:
    第五课 主引导程序的扩展 下
    C.Candy
    B.大钉骑马走江湖
    A喝酒(北京林业大学校赛)
    HDU 5666 Segment
    南京理工大学第八届校赛题目题解(部分)
    TCO 2016 Round 1B
    139. Word Break
    90. Subsets II
    78. Subsets
  • 原文地址:https://www.cnblogs.com/0daybug/p/11571178.html
Copyright © 2020-2023  润新知