5/4 L7 程式碼片段

DA 桌面自動化 II

計算機.csv

op1,op2,op
“[1,3]”,“[3,3]”,+
“[1,1]”,“[1,1]”,x
“[2,3]”,“[3,3]”,-

獲得螢幕解析度資訊

let size = await api.screen.size();
console.log(size);

尋找畫面中的截圖,並返回截圖座標資訊

let found = await api.screen.find("crop-截圖.png");

在接下來的10秒中,等待畫面上的截圖出現

let found = await api.screen.waitFor("crop-截圖.png",10000);

在接下來的10秒中,等待畫面上的特定範圍有截圖出現

let found = await api.screen.waitFor("crop-截圖.png",10000,{"left":0,"top":420,"width":500,"height":420});
await api.mouse.move(found.left, found.top); //移動滑鼠到找到的位置

在尋找截圖的時候,使用信心程度 confidence

let found = await api.screen.waitFor("crop-截圖.png",5000
    , { "confidence": 0.98 }
);
if(found){
    await api.mouse.move(found.left, found.top); //移動滑鼠到找到的位置
} else {
    console.log("not found");
}

開啟工作資料夾檔案

await api.shell.openPath('output.csv');

開啟任意檔案

await api.shell.openPath('/Users/bossp/Desktop/Emily 課程介紹懶人包.txt');

開啟檔案總管並選取檔案

await api.shell.showItemInFolder('/Users/bossp/Desktop/Emily 課程介紹懶人包.txt');

  • 開啟檔案總管到指定目錄
await api.shell.showItemInFolder('/Users/bossp/Desktop/');

將檔案移至資源回收桶

await api.shell.trashItem('/Users/emily/Desktop/input.xlsx');

用瀏覽器開啟網頁連結

await api.shell.openExternal('https://google.com');

練習:開啟計算機/小算盤

MAC

await api.shell.openPath('/System/Applications/Calculator.app');

WIN

await api.shell.openPath('C:\\Windows\\System32\\calc.exe');

寫入三筆資料到 CSV 檔

await api.writeCSV('計算機.csv', [{ op1:[1,3], op2:[3,3], op:'+'}, { op1:[1,1], op2:[1,1], op:'x' }, { op1:[2,3], op2:[3,3], op:'-' }]);

讀 CSV檔,分隔符號為逗點,讀取表頭須從檔頭略過0列

let calc_rows = await api.readCSV('計算機.csv', ',', 0)

console.log(calc_rows);

範例:DA 完整範例-自動化操作計算機,並取回運算結果,存檔

MAC

// step1. 開啟計算機
await api.shell.openPath('/System/Applications/Calculator.app');
await api.sleep(2000);

let calc_rows = await api.readCSV('計算機.csv', ',', 0);
console.log(calc_rows);

let crop_mapping = {
  '1': 'crop-75b8da04123735dd7d0af3f2271efd5d4d14621fc191f07c86cfdfb6685d061a.png',
  '2': 'crop-e02060438929be8bf2f18e735a7193411ec64bd2fefbb3ab0c971ea1f1d4d36a.png',
  '3': 'crop-6c75ea23ad55160f1113cbb50eb4009e3756cdd156817e4b0011a285d62d072f.png',
  '+': 'crop-6564ed672209311475e2dac563f709c37b09c7da7b958398702f56a5865269cf.png',
  '-': 'crop-40eee63f726b9d21497c64f9a0ab481cccfe58e55e55cb6c2b4fe6b9c850f4a3.png',
  'x': 'crop-2fbbc426c2d7df99527462e6ef87aaa599cb2b80153b36e72614a94f0a57bc84.png',
  '=': 'crop-e18702fd1f7c2db9330bde27cff8f834360f617346717700b707812c88625345.png',
  '/': 'crop-7413d025acb77e0f2acde7fa5df652be91a35ad11b62fad6a27140fe95536a59.png'
};

for(let row of calc_rows) {
    console.log(row);
    let op1_array = JSON.parse(row['op1']);
    for(let digit of op1_array){
        await api.clickCrop(crop_mapping[digit],30,30);
    }
    await api.clickCrop(crop_mapping[row['op']],30,30);
    let op2_array = JSON.parse(row['op2']);
    for(let digit of op2_array){
        await api.clickCrop(crop_mapping[digit],30,30);
    }
    await api.clickCrop(crop_mapping['='],30,30);

    let found = await api.screen.find(crop_mapping['/']);
    await api.mouse.move(found.left, found.top-50);
    await api.mouse.clickLeft();
    await api.sleep(1000);
    await api.mouse.clickLeft();
    await api.cmdC();
    await api.sleep(1000);
    let result = api.clipboard.readText();
    row.result = result;
}

await api.writeCSV("計算結果.csv", calc_rows);

WINDOWS

await api.shell.openPath('C:\\Windows\\System32\\calc.exe');
await api.sleep(2000);

let crop_mapping = {
  1:'crop-949c4e8ecf8b14df8fef94f6b926ffed5754e70287429547008e82dc8011b66b.png',
  2:'crop-693ddfb244f3f27f677b47eacf13842560e781bb1f6a93cb9de31964b589850b.png',
  3:'crop-94473ca981b610bd2bd07fb6934f2ef4a3a2a2e7bed81f1750cf524c4aecf04e.png',
  '+':'crop-5a53f546683f85fe8014544d92acad03c45d2eb04cef719e507ab013d7222dbe.png',
  '-':'crop-6e2858f139784e51b6414e10b782e8f4b8df99313628b59c1496ea73911e09da.png',
  'x':'crop-66e0c929adb3ff2a2253ff17fa7586d69db98d1094550796d85218eb5fe199fe.png',
  '/': 'crop-b22536ec02c7d3741c1480ea072e5b520da4ff3233ce63db2ca0855bebb8f95e.png',
  '=': 'crop-f2857bb3a95d6c3d0e44aa62ed8f1eab60cd1838241e8571b6bf6e3e3bee7253.png'
};

let calc_rows = await api.readCSV('計算機.csv', ',', 0);
console.log(calc_rows);

for(let row of calc_rows) {
    console.log(row);
    let op1_array = JSON.parse(row['op1']);
    for(let digit of op1_array){
        await api.clickCrop(crop_mapping[digit],30,30);
    }
    await api.clickCrop(crop_mapping[row['op']],30,30);
    let op2_array = JSON.parse(row['op2']);
    for(let digit of op2_array){
        await api.clickCrop(crop_mapping[digit],30,30);
    }
    await api.clickCrop(crop_mapping['='],30,30);

    let found = await api.screen.find(crop_mapping['/']);
    await api.mouse.move(found.left+42, found.top-143);
    await api.sleep(1500);
    await api.mouse.drag(found.left+42-300, found.top-143);
    await api.sleep(1500);
    await api.ctrlC();
    await api.sleep(1500);
    let result = api.clipboard.readText();
    row.result = result.replaceAll(',','');
}

await api.writeCSV("計算結果.csv", calc_rows);