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