螢幕截圖
阿新 • • 發佈:2020-12-29
技術標籤:auto.js
截圖分為兩步:
- 獲取截圖許可權
/* 請求截圖許可權 */
if(!requestScreenCapture())
{
toast("請求截圖失敗!");
exit();
}
- 進行截圖
captureScreen(path);
-
問題1:
在 autojs 中,呼叫 requestScreenCapture 函式,系統會彈出詢問框,問是否允許 autojs 截圖,此時指令碼就會阻塞,直到手動點選“取消”或“立即開始”按鈕才會繼續執行。
這個情況,會導致定時指令碼無法完全脫離人工進行操作了。
-
方案:
思路上,通過點選“立即開始”,就可以允許指令碼繼續往下跑了,但是由於此時指令碼已經阻塞,所以它自己是點不了自己的了。所以,通過新建一個執行緒,讓那個執行緒幫忙點,那就可以了。
/* 開啟執行緒,找到並點選立即開始,並且觸發事件(只需要執行一次就可以) */
threads.start(function () {
var beginBtn;
if (beginBtn = classNameContains("Button").textContains("立即開始").findOne(2000)) {
beginBtn.click();
}
});
-
問題2:
截圖時captureScreen(path)
中的path
是指截圖儲存的檔名稱,包括路徑名和檔名,為了便於查詢,我們希望把截圖放在相機資料夾下;同時,為了防止檔名重複,可以用當前日期時間對截圖的檔案進行命名。 -
方案:
相機的資料夾路徑為:
/DCIM/Camera/
獲取當前網路時間:
function IntTime() {
try {
var recode_suning = http.get("http://quan.suning.com/getSysTime.do");
var suningTime = recode_suning.body.json();
return suningTime.sysTime1;
} catch (e) {}
}
var myDateTime = IntTime();
詳見文章“獲取當前時間
下面是開啟支付寶首頁進行截圖的例子:
toast("begin");
app.launchApp('支付寶');
sleep(1500);
/* 獲取日期用於生成截圖檔名 */
function IntTime() {
try {
var recode_suning = http.get("http://quan.suning.com/getSysTime.do");
var suningTime = recode_suning.body.json();
return suningTime.sysTime1;
} catch (e) {}
}
var myDateTime = IntTime();
/* 開啟執行緒,找到並點選立即開始,並且觸發事件(只需要執行一次就可以) */
threads.start(function () {
var beginBtn;
if (beginBtn = classNameContains("Button").textContains("立即開始").findOne(2000)) {
beginBtn.click();
}
});
/* 請求截圖許可權 */
if(!requestScreenCapture())
{
toast("請求截圖失敗!");
exit();
}
/* 截圖 */
var path = files.getSdcardPath() + "/DCIM/Camera/" + myDateTime + ".png";
sleep(1000);
captureScreen(path);
toast("end");