個人TodoList增長了一項,Appium | Airtest 抖音自動評論、創意評論(全部評論/前一百評論男女佔比 | 全部評論詞雲),記錄了當時的一個想法。Appium和Airtest均可用於移動端自動化測試,Airtest是網易家的,想作評論詞雲是由於在這以前用Appium寫了一個爬我的微信朋友圈詞雲圖的程序(見圖1),同時Airtest操做更簡單,也在考慮的範圍。javascript
再後來,一直未實施,主要是以爲得用手機連着電腦,不能隨時隨地操做,就擱置了。近段時間由於工做時的一個想法,又把這事提起來了。業務場景比較特殊,可能會涉及版權問題,就不細說,簡言之,想實現某註冊機自動生成註冊碼功能,繼而接觸到了按鍵精靈。按鍵精靈很早就存在,也很早就有所耳聞,但一直未實地接觸,恰好借這個機會接觸一下。用按鍵精靈PC版實現了註冊機自動生成註冊碼功能,在實現的過程當中接觸到了按鍵精靈手機版,孤陋寡聞了,一個神奇的存在,立馬就想到了能夠用它先實現個簡單的抖音自動評論功能吧。php
前言有點囉嗦了。。。,喏,這個是微信朋友圈詞雲圖,圖1html
過了前言是導語啊,看了這篇文章,你能夠了解到哪些內容:java
1. 某註冊機自動生成註冊碼——按鍵精靈PC版腳本編寫nginx
2. 抖音自動評論——按鍵精靈手機版使用及腳本編寫正則表達式
3. Lua插件使用及編寫 sql
4. 拓展功能,看結尾Tipsapi
5. 非技術工做者能夠了解到,不少功能表現,沒有那麼複雜,程序能夠代替手工安全
6. ++微信
不是本文重點,會簡單概過(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)
第一版運行示例:
顧名思義,評論的內容是古詩詞版的,爲嘛,我是文學社社長[/手動滑稽臉],首先就想到來點清流版的。演示視頻裏用到的是搜狗輸入法小汪版,評論內容更萬金油一些,嗯。
先下載安裝上述提到的按鍵精靈手機助手,敲黑板,手機助手編寫的腳本安卓手機和蘋果手機均可以使用,前置條件是安卓須要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
通過以上操做便可完成抖音短視頻自動評論功能,每步操做可經過點擊調試菜單在手機上運行調試。剩下的就是進行循環操做。
按鍵精靈手機助手每次預覽界面、調試運行腳本時會自動同步界面、代碼到手機端按鍵精靈App裏,默認在底部腳本——未分類文件夾裏,打開後便可看到手機助手編寫的腳本:
點擊腳本便可進入到腳本配置界面:
腳本名稱和使用說明可在手機助手——腳本——腳本屬性裏設置,我這個簡單,使用說明就一句話,」老省事了,開啓後別動手機就成」。
腳本設置相關配置項須要經過手機助手——界面進行設計,配置項變量可在代碼中經過ReadUIConfig(界面配置項名稱, 默認值)獲取。
手機助手界面(見上圖預覽效果):
Dim commentTimes
commentTimes = CInt(ReadUIConfig("commentTimes", 10)) //CInt() 嘗試將表達式轉換爲短整數型,如未取到值,默認10次
設置後點加載按鈕便可運行腳本,有兩種控制方式,一種是按鍵精靈懸浮圖標控制,一種是音量加減控制,加運行,減中止運行,可在按鍵精靈App設置菜單裏進行設置。
腳本配置界面圖例右上角編輯按鈕可在手機上查看腳本內容,並可實時修改保存運行,便可獨立運行。
源碼中還有不少上述沒有提到的地方,包括不限於基礎語法,循環操做,封裝方法等,可經過代碼註釋作一瞭解。
//導入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
OK,各位看官,相信通過上述一番文字圖片轟炸(LuoSuo),應該能夠上手按鍵精靈作一些事情了吧。固然我接觸的也只是皮毛,學無止境,當有一個新想法時,可能會再接觸到更多的東西。除了上述實現的抖音自動評論,還能夠作哪些事情呢,我簡單列幾項,不細說,若是你有這方面需求,很快能夠想到。
1. 按鍵精靈手機版是能夠操做不少基礎功能的,打電話、讀發短信等等,因此,腳本源碼還好,用別人封裝好的不必定是安全的
2. 能夠實現批量添加、刪除、清空聯繫人,具體用途本身想
3. 插件編寫,看一下按鍵精靈自帶的插件源碼,就能夠寫自定義插件實現更強大的功能
4. 仍是++