0×00 前言
我的TodoList增加了一項,Appium | Airtest 抖音自動評論、創意評論(所有評論/前一百評論男女占比 | 所有評論詞雲),記錄了當時的一個想法。Appium和Airtest都可用於移動端自動化測試,Airtest是網易家的,想做評論詞雲是因為在這之前用Appium寫了一個爬個人微信朋友圈詞雲圖的程序(見圖1),同時Airtest操作更簡單,也在考慮的范圍。
再后來,一直未實施,主要是覺得得用手機連着電腦,不能隨時隨地操作,就擱置了。近段時間因為工作時的一個想法,又把這事提起來了。業務場景比較特殊,可能會涉及版權問題,就不細說,簡言之,想實現某注冊機自動生成注冊碼功能,繼而接觸到了按鍵精靈。按鍵精靈很早就存在,也很早就有所耳聞,但一直未實地接觸,剛好借這個機會接觸一下。用按鍵精靈PC版實現了注冊機自動生成注冊碼功能,在實現的過程中接觸到了按鍵精靈手機版,孤陋寡聞了,一個神奇的存在,立馬就想到了可以用它先實現個簡單的抖音自動評論功能吧。
前言有點啰嗦了。。。,喏,這個是微信朋友圈詞雲圖,圖1
演示視頻:
0×01 導語
過了前言是導語啊,看了這篇文章,你可以了解到哪些內容:
1. 某注冊機自動生成注冊碼——按鍵精靈PC版腳本編寫
2. 抖音自動評論——按鍵精靈手機版使用及腳本編寫
3. Lua插件使用及編寫
4. 拓展功能,看結尾Tips
5. 非技術工作者可以了解到,很多功能表現,沒有那么復雜,程序可以代替手工
6. ++
0×02 某注冊機自動生成注冊碼
不是本文重點,會簡單概過(Kuo)。按鍵精靈官網下載地址http://download.myanjian.com/,可下載按鍵精靈PC版,安卓版,按鍵精靈手機助手。
腳本編寫界面(需要注意紅色箭頭指向的幾個地方,了解一下相關功能項):
學習方式:按鍵精靈使用的是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)
初版運行示例:
0×03 抖音自動評論——古詩詞版
顧名思義,評論的內容是古詩詞版的,為嘛,我是文學社社長[/手動滑稽臉],首先就想到來點清流版的。演示視頻里用到的是搜狗輸入法小汪版,評論內容更萬金油一些,嗯。
先下載安裝上述提到的按鍵精靈手機助手,敲黑板,手機助手編寫的腳本安卓手機和蘋果手機都可以使用,前置條件是安卓需要ROOT,蘋果需要越獄。腳本上可能會有一些差別,看具體的方法兩個端是否都支持,安卓支持更全一些。
本文演示手機是蘋果越獄機,機型:iPhone 6S Plus,安卓機需要各位看官自行嘗試。
除了在電腦上安裝按鍵精靈手機助手,還需要在蘋果越獄機上安裝按鍵精靈越獄插件,按鍵精靈Cydia官方源地址:http://apt.mobileanjian.com,在Cydia中添加按鍵精靈官方源之后,按iOS對應系統版本安裝對應的按鍵精靈插件:
之后手機通過數據線連接電腦,打開按鍵精靈手機助手,即可連接上手機編寫腳本。
手機助手編寫腳本界面(需要注意紅色箭頭指向的幾個地方,了解一下相關功能項):
按鍵精靈手機助手學習方法:和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. 找評論按鈕,點擊評論按鈕
找評論按鈕需要用到抓抓菜單,找到評論按鈕在屏幕中的坐標點:
先點左上角截屏,即可加載當前抖音視頻屏幕截圖,滑動滾軸找到評論按鈕,鼠標放到中心點,顯示的坐標點即為評論按鈕的坐標點,
問:這里是否有其它不依賴坐標點的方法,有,了解一下以圖搜圖功能,需要截取評論按鈕Icon,放到附件里,通過代碼在當前屏幕中搜索評論按鈕截圖的位置。
基本命令——短暫點擊屏幕——代入x,y坐標點,即可點擊屏幕某一坐標
整理代碼:
//查找並點擊評論按鈕坐標,暫定1150×1440 Tap 1150, 1440
點擊評論按鈕后示例:
4. 點擊左下角評論輸入框,調接口獲取評論內容,自動輸入評論內容,點發送按鈕
4-1. 按照上述找評論按鈕方法,找評論輸入框大概坐標區域,因為是在屏幕底部偏左區域(見上圖紅色圈注),故通過屏幕高度計算得出大概坐標點:
//點擊評論框 Tap 80, screenY - 80
評論框展開示例(紅色圈注區域為輸入評論內容區域,已自動獲取焦點):
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
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里,默認在底部腳本——未分類文件夾里,打開后即可看到手機助手編寫的腳本:
點擊腳本即可進入到腳本配置界面:
腳本名稱和使用說明可在手機助手——腳本——腳本屬性里設置,我這個簡單,使用說明就一句話,”老省事了,開啟后別動手機就成”。
腳本設置相關配置項需要通過手機助手——界面進行設計,配置項變量可在代碼中通過ReadUIConfig(界面配置項名稱, 默認值)獲取。
手機助手界面(見上圖預覽效果):
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. 還是++