善用 Applescript 讓 Mac 自動化:開啟瀏覽器、連結網站以及重新整理 (for BAT 測試 -- 這真的只是學術研究)



前言

  • 最近想測試 BAT 刷新的機制,特別來用 Applescript 讓 Brave 瀏覽器在晚上睡覺的時候連結網頁、並重新整理,看看 BAT 在什麼條件下會增加得比較快
  • 這樣邏輯上應該也算是挖礦 😂 ,順便放在 Web3 | Blockchain 分類下。
  • 另外,以前這類型的自動化都用 Sikuli (官網介紹) 做,但是圖形基礎的程式風險太大,還是純指令比較確實。



步驟

開啟「工序指令編寫程式」

  • 可以用 ⌘ + <space> 搜尋「工序指令編寫程式」

  • 然後貼上以下程式碼並點擊執行按鈕
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
tell application "Brave Browser" to activate
delay 0.5

tell application "System Events" to tell process "Brave Browser"
keystroke "t" using command down
delay 0.5
repeat 5 times
keystroke "r" using command down
delay 0.3
end repeat
keystroke "l" using command down
keystroke "google.com"
delay 0.5
key code 36
delay 1.5
keystroke "w" using command down
delay 3
end tell

以上內容主要的流程是:

  1. 打開瀏覽器 (我用 Brave Browser;以「應用程式」(Application) 裡面列的名字為主。)
  2. 打開新分頁:用快捷鍵 ⌘ + T
  3. 重新整理 5 次,看有沒有機會刷到一次廣告:用快捷鍵 ⌘ + R
  4. 然後在網址列準備輸入:用快捷鍵 ⌘ + L
  5. 輸入 “google.com
  6. 然後按下 Enter:key code 36;關於 key code 清單參考這篇
  7. 等待 1.5 秒後關閉分頁:用快捷鍵 ⌘ + W

關鍵指令說明

  • delay:在執行下一步之前停止的秒數,跟 Python 或 Bash 的 sleep 概念相同
  • keystroke:鍵入按鍵、command down 則是要連同 ⌘ 一起按;也就是按下快捷鍵的意思
  • repeat:重複執行 n 次,重複的範圍是在看到 end repeat 之前
  • key code 36:按下代碼 36 的按鈕,36 代表的是 <Enter>
  • tell application "Brave Browser" to activate:打開 Brave Browser
  • tell application "System Events" to tell process "Brave Browser":在鍵入快捷鍵時,其實要用到的是 system Events ,可以參考這篇

包成函數、設定 delay 隨機秒數

要測試總不能只開一個網站,等待時間固定也不是好辦法,所以改成:

  • 參數化各個 delay 的秒數
  • 而且各 delay 秒數會在給定的範圍內隨機取
  • 整個流程包成函數,如果要做多個網站就很方便

最後長得像這樣:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
tell application "Brave Browser" to activate
delay 0.5

set full_repeat to 100
set full_repeat_delay to 30


to openUrl(input_url)
    set refresh_repeat to 3
    set after_new_tab_delay to (random number from 0.4 to 0.8)
    set after_refresh_delay to (random number from 0.4 to 0.6)
    set after_type_url_delay to (random number from 0.5 to 1)
    set after_request_delay to (random number from 15 to 30)
    set after_close_tab_delay to (random number from 10 to 30)

    tell application "System Events" to tell process "Brave Browser"
        keystroke "t" using command down
        delay after_new_tab_delay
        repeat refresh_repeat times
            keystroke "r" using command down
            delay after_refresh_delay
        end repeat
        keystroke "l" using command down
        keystroke input_url
        delay after_type_url_delay
        key code 36
        delay after_request_delay
        keystroke "w" using command down
        delay after_close_tab_delay
    end tell
end openUrl


repeat full_repeat times
    openUrl("github.com")
    openUrl("google.com")
    delay full_repeat_delay

end repeat

補充說明:

  • setto …:指派變數,例如 set count to 99,就類似 python 中的 count = 99
  • 函數:applescript 裡面是用 on 或是 to 來宣告函數。上面宣告了 openUrl 這個函數來重複前面提到的流程。
  • (random number from 0.4 to 0.8):依據指定的 fromto 之間取隨機值;也就是隨機等待 0.4 ~ 0.8 之間某一秒數。

如果之後要新增網站就很簡單啦,只要在最下方新增一行即可:

1
2
3
4
5
6
7
8
9
...

repeat full_repeat times
    openUrl("github.com")
    openUrl("google.com")
    openUrl("www.youtube.com")
    delay full_repeat_delay

end repeat

Note

  1. 之後如果有更新版本,就一併推在 Github:https://github.com/ktlast/daily-applescript,底下的 refresh_brave (之後資料夾結構可能會改來改去,所以先貼 repo link 就好)
  2. 不要用來連本 blog,就算要連也幫我點個廣告 😂



後記

  • 目前這樣安排,一輪大約會在 3 分鐘左右,而 full_repeat 給定 100,所以初估執行完會需要 5 小時,差不多就晚上睡前執行一下。
  • 目前這樣一個晚上連兩個網站,大概會拿到 0.02 BAT,實在不是很划算;不過還不確定到底演算法是不是跟連結過的網站數量有關,所以之後會一直調整策略。



REF


主題 StackJimmy 設計