1. 程式人生 > 其它 >螢幕截圖

螢幕截圖

技術標籤:auto.js

截圖分為兩步:

  1. 獲取截圖許可權
/* 請求截圖許可權 */
if(!requestScreenCapture())
{
    toast("請求截圖失敗!");
    exit();
}
  1. 進行截圖
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");