手机自动阅读挣钱,这次用脚本写
文章目錄
- 一、演示效果
- 二、上一版本的問(wèn)題
- 三、找一個(gè)好用的自動(dòng)化方案
- 四、auto.js簡(jiǎn)單介紹
- auto.js長(zhǎng)什么樣
- auto.js的原理
- 五、auto.js的使用
- 開發(fā)環(huán)境搭建
- 手機(jī)端安裝auto.js
- PC端配置
- 手機(jī)端與PC端互聯(lián)與調(diào)試
- 調(diào)試運(yùn)行
- 打印和查看日志
- 如何脫離PC運(yùn)行腳本
- 六、用auto.js開發(fā)自動(dòng)化腳本
- 獲取界面布局信息
- 用auto.js查找界面元素
- 相關(guān)API
- 注意UI元素查找接口的阻塞與非阻塞
- 示例:趣頭條模擬選擇一個(gè)文章分類
- 如何適配不同分辨率的手機(jī)
- 獲取當(dāng)前應(yīng)用包名和Activity名稱
- 模擬操作
- 點(diǎn)擊控件
- 發(fā)送按鍵
- 滑動(dòng)屏幕
- 編寫自動(dòng)化閱讀腳本主要的代碼邏輯
- 七、總結(jié)
前面發(fā)的一篇文章《薅羊毛!如何讓趣頭條自動(dòng)閱讀掙錢》中,我用c++實(shí)現(xiàn)趣頭條的自動(dòng)閱讀,掙錢拿去買瓜吃了。最近剛好發(fā)現(xiàn)薅羊毛的大戶很多都被封號(hào)做不下去了,我想這不就剛好是我們散戶薅羊毛的大好時(shí)機(jī)嗎?今天我也找了個(gè)用腳本編寫的方法,比之前用c++寫要更通用,更簡(jiǎn)單,一起了解下。
一、演示效果
感興趣的歡迎關(guān)注我公微信眾號(hào),回復(fù)“autojs”獲取示例代碼。
二、上一版本的問(wèn)題
我之前一篇文章《薅羊毛!如何讓趣頭條自動(dòng)閱讀掙錢》中的自動(dòng)化方案,有幾個(gè)明顯的問(wèn)題:
腳本語(yǔ)言在自動(dòng)化方面有工具支持,更易用
三、找一個(gè)好用的自動(dòng)化方案
-
UIAutomator
目前做自動(dòng)化測(cè)試用的很多的框架,是google出品,代碼用java編寫。感覺(jué)搭建環(huán)境很麻煩,java語(yǔ)言編譯執(zhí)行一次也很慢。
-
按鍵精靈
在官方論壇看到的教程,似乎是通過(guò)圖色查找來(lái)定位UI控件的,不像UIAutomator那么隨心所欲。例如要點(diǎn)一個(gè)按鈕,你先給這個(gè)按鈕截個(gè)圖,然后用你截圖的像素特征去定位這個(gè)控件。腳本語(yǔ)言長(zhǎng)得有點(diǎn)丑,個(gè)人不喜歡。
-
auto.js
這個(gè)是國(guó)人寫的,可以用javascript寫腳本,環(huán)境搭建簡(jiǎn)單,也可以那樣UIAutomator像操控手機(jī)界面,而且開發(fā)調(diào)試很方便。
經(jīng)過(guò)以上對(duì)比,我選擇了auto.js。
四、auto.js簡(jiǎn)單介紹
auto.js長(zhǎng)什么樣
使用auto.js,最終我們只需要在手機(jī)上裝一個(gè)apk,然后用這個(gè)apk加載并執(zhí)行我們寫好的腳本。
在開發(fā)和測(cè)試階段,auto.js也提供了vs code的插件支持,只要手機(jī)和PC網(wǎng)絡(luò)互通,就可以用vs code編寫和調(diào)試腳本,非常方便。
auto.js的原理
auto.js是基于安卓系統(tǒng)的AccessibilityService實(shí)現(xiàn)的。應(yīng)用通過(guò)AccessibilityService,可以感知當(dāng)前手機(jī)的各種事件,例如:焦點(diǎn)改變,按鍵被按下等,同時(shí)提供查詢當(dāng)前界面內(nèi)容的功能。這個(gè)服務(wù)設(shè)計(jì)初衷是用于幫助殘障用戶使用android設(shè)備的,但現(xiàn)在廣泛被用來(lái)寫作自動(dòng)化測(cè)試,各種外掛腳本。
五、auto.js的使用
開發(fā)環(huán)境搭建
手機(jī)端安裝auto.js
安裝auto.js應(yīng)用
在設(shè)置界面開啟auto.js訪問(wèn)AccessibilityService的權(quán)限
PC端配置
安裝vs code,然后安裝Auto.js-VSCodeExt擴(kuò)展插件
按CTRL + SHIFT + P打開命令面板,輸入Auto.j命令即可看到插件提供的功能:
我們選擇Start Server,即可開啟一個(gè)http server與手機(jī)端調(diào)試代碼,點(diǎn)擊后vs code會(huì)有如下提示:
手機(jī)端與PC端互聯(lián)與調(diào)試
在手機(jī)上打開auto.js,點(diǎn)左上角那個(gè)菜單按鈕:
然后點(diǎn)擊"連接電腦",然后輸入電腦的IP
手機(jī)與PC連接后,會(huì)看到vs code如下的提示:
調(diào)試運(yùn)行
在vs code的代碼界面按F5鍵即可運(yùn)行代碼。
按SHIFT+ F5即可停止運(yùn)行。
打印和查看日志
auto.js可以使用console.log("xxxx");來(lái)打印調(diào)試日志。
打開 VS Code上面菜單的"幫助"->“切換開發(fā)人員工具”->"Console"即可在代碼運(yùn)行是查看日志信息。
如何脫離PC運(yùn)行腳本
將腳本導(dǎo)入到手機(jī)內(nèi),然后點(diǎn)擊手機(jī)上的auto.js應(yīng)用的腳本菜單,然后點(diǎn)那個(gè)+號(hào)導(dǎo)入你編寫好的腳本,然后點(diǎn)擊腳本旁邊的運(yùn)行圖標(biāo)即可。
六、用auto.js開發(fā)自動(dòng)化腳本
獲取界面布局信息
定位元素在界面中的位置,必須了解界面的布局情況,我們使用android sdk\tools\bin\下的中的uiautomatorviewer來(lái)獲取應(yīng)用界面布局。
adb連接手機(jī)后,打開uiautomatorviewer,然后點(diǎn)擊下圖中的按鈕對(duì)手機(jī)當(dāng)前界面進(jìn)行截屏并分析出布局信息。
成功獲取后,界面如下:
可以看到,即使不是自己開發(fā)的應(yīng)用,界面的布局也都完全暴露出來(lái)了。根據(jù)獲取的布局信息,auto.js可以精確找到界面中的元素。例如我點(diǎn)擊右上角那個(gè)120金幣,可以拿到幾個(gè)關(guān)鍵信息:
- text 元素的文本。上圖例子文本為空
- resource-id 元素的唯一id。 上圖例子為w0
- content-desc 元素的描述。 上圖例子為空
用auto.js查找界面元素
拿到這些信息后怎么用auto.js去查找元素呢?接下來(lái)我們看auto.js元素查找部分。
相關(guān)API
auto.js的作者未開發(fā)者提供了比較全的API使用文檔,元素查找部分的相關(guān)API為:
https://hyb1996.github.io/AutoJs-Docs/#/widgetsBasedAutomation?id=uiselector
注意UI元素查找接口的阻塞與非阻塞
上邊介紹文本查找都用find()接口,其實(shí)auto.js還提供了其他接口:
UiSelector.findOnce()
- 返回 UiObject
UiSelector.findOnce(i)
- i {number} 索引
根據(jù)當(dāng)前的選擇器所確定的篩選條件,對(duì)屏幕上的控件進(jìn)行搜索,并返回第 i + 1 個(gè)符合條件的控件;
UiSelector.find()
- 返回 UiCollection
返回一個(gè)搜索條件的集合,經(jīng)驗(yàn)證,如果找不到會(huì)阻塞
UiSelector.findOne()
- 返回 UiObject
在界面中找,找不到就一直等
UiSelector.findOne(timeout)
- timeout {number} 搜索的超時(shí)時(shí)間,單位毫秒
返回 UiObject
在界面中找,如果超時(shí)沒(méi)找到就返回null
API沒(méi)啥說(shuō)的,要注意的是除了UiSelector.findOne(timeout),其他的操作找不到元素時(shí),都會(huì)阻塞!所以我的腳本里,查找元素都用UiSelector.findOne(timeout)
示例:趣頭條模擬選擇一個(gè)文章分類
例如我要在腳本里依次選中"推薦",“生活”…這些不同的內(nèi)容欄目,防止重復(fù)閱讀同樣的文章。
這里我們不能直接通過(guò)text("生活").findOne()來(lái)查找,因?yàn)椴煌娜孙@示的是不一樣的,所以要用列表遍歷的方式來(lái)做。
第一步,先用uiautomatorviewer分析??梢钥吹竭@一排菜單是一個(gè)HorizontalScrollView,下邊有好幾個(gè)TextView;HorizontalScrollView的id為xc。
于是我們的代碼類似下面這樣:
//查找HorizontalScrollView var ls = id ("xc").findOne(2000); /*找出查找HorizontalScrollView的子控件 也就是 "推薦 生活 歷史" 這些*/ var titles = ls.find(className("TextView")); //假如我要點(diǎn)第二個(gè):“生活” var index = 1; //選擇點(diǎn)擊一個(gè) btn = titles.child(index); //下次閱讀下一專欄 index = index + 1 % titles.length如何適配不同分辨率的手機(jī)
auto.js提供了如下接口
setScreenMetrics(width, height)
- width {number} 屏幕寬度,單位像素
- height {number} 屏幕高度,單位像素
設(shè)置腳本坐標(biāo)點(diǎn)擊所適合的屏幕寬高。如果腳本運(yùn)行時(shí),屏幕寬度不一致會(huì)自動(dòng)放縮坐標(biāo)。
獲取當(dāng)前應(yīng)用包名和Activity名稱
隨著android版本的更新,一般的應(yīng)用目前已經(jīng)沒(méi)法通過(guò)ActivityManager獲取頂端的Activity了。auto.js使用了AccessibilityService這個(gè)服務(wù)渠道來(lái)獲取。對(duì)于我們的腳本,使用以下的接口:
/*currentPackage()是auto.js提供的接口*/ var topPackage = currentPackage();/*currentActivity()是auto.js提供的接口*/ var topActivity = currentActivity();模擬操作
找到界面元素后,可以通過(guò)auto.js提供的接口操控這些元素。
點(diǎn)擊控件
var btn = id("xxx").findOne(2000); if(null != btn)btn.click();//點(diǎn)擊發(fā)送按鍵
我們用到的,發(fā)送back鍵:
back();滑動(dòng)屏幕
可以找到待滑動(dòng)的UI元素,然后滑動(dòng),也可以直接通過(guò)全局函數(shù)swipe來(lái)完成。我覺(jué)得后面一種好用:
swipe(starx, starty, endx, endy, timeduration);編寫自動(dòng)化閱讀腳本主要的代碼邏輯
程序的整體流程,請(qǐng)看之前發(fā)的公眾號(hào)文章:
現(xiàn)在對(duì)于我們來(lái)說(shuō)只需知道如何實(shí)現(xiàn)幾個(gè)功能就行:
通過(guò)上一節(jié)知識(shí),我們已經(jīng)可以用auto.js寫自動(dòng)化閱讀了。代碼就差不多像下面這樣:
七、總結(jié)
通過(guò)試用auto.js,我覺(jué)得它是款非常不錯(cuò)的自動(dòng)化測(cè)試工具,推薦android開發(fā)者在軟件測(cè)試時(shí)使用。只要google不取消AccessibilityService這個(gè)功能,應(yīng)該auto.js就一直能用。關(guān)于自動(dòng)化閱讀的功能對(duì)auto.js來(lái)說(shuō)太簡(jiǎn)單了,完全可以用來(lái)開發(fā)你想要的更強(qiáng)大的功能,例如自動(dòng)搶紅包,自動(dòng)收螞蟻森林能量,自動(dòng)收拼多多果園的金幣。。。
自動(dòng)化工具auto.js因?yàn)榭梢杂胘avascript編寫,非常簡(jiǎn)單易學(xué)。目前像趣頭條這樣的軟件一搜一大把,都可以拿來(lái)練練手。
本文趣頭條自動(dòng)閱讀的例子,如果要源碼的歡迎關(guān)注我的微信公眾號(hào),就是下面圖片這個(gè),回復(fù)"autojs"獲取下載地址。如果回復(fù)的人多的話我在閑暇時(shí)間更新一下腳本,支持多個(gè)app的自動(dòng)閱讀腳本,推送給回復(fù)過(guò)的朋友。
總結(jié)
以上是生活随笔為你收集整理的手机自动阅读挣钱,这次用脚本写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 初入职场的程序员,不想被时代淘汰?那你必
- 下一篇: Hybird Astar算法原理