ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

【AutoHotkey】再生ボタンのクリックに失敗する現象が発生したので対策してみた。

f:id:yasushiito:20190403184928p:plain
ベッドで休んでいる間に Radiko の再生を自動化するためのスクリプトの話です。

先日たまたま再生に失敗したのでソースコードを眺めながら原因を考えていました。
PC シャットダウンは定時に発動したので問題は再生ボタンクリックのスクリプトにあると考えました。
失敗した時のリトライ処理は組み込んであるので、きっとリカバー不可能な段階でこけたんだと思います。
リトライに組み込まれておらず、操作ミスが発生する恐れがある処理と言ったら……。
番組のページをブラウザで開いた時にレスポンスが間に合わなかった状況ですね。
スリープコマンドで十分なウエイトを取っているつもりではありますが、ネットワークの都合なので間に合わなかったり正しく表示されない可能性はあります。

さてどうしたもんかな。


思案を巡らしたところ、再生ボタンが見つからなかった時はブラウザを強制的に終了させてページを開くところからやり直す手順が修正コストが少なくエラーが発生しづらいと考えました。
修正した結果はこんな感じです。

    ;クリックミスを考慮して3階までリトライする。
    Loop, 3
    {
        ;Edge は実行ファイルではないので START コマンドから起動しなければならないのでバッチファイルから起動してもらう。
        Run, microsoft-edge:%url%
        ;ページが開くまで待つ。
        Sleep 5000
        ;ウィンドウ左端にはスクリーンキーボードなどのオーバーレイアプリが開いてボタンを隠してしまうのでスクリーン右側に移動させる。
        WinMove, A,,600, 0
        Sleep 5000
        ;ここからは再生ボタンを探してクリックする処理。
        ;ボタンを探してクリック。
        r := ClickButton(btnplay)
        ;連打防止のためクリック成功失敗に関わらず3秒間停止。
        Sleep 3000
        ;ボタンクリックに成功していたらループを中断。
        if r
            Break
        ;クイックに失敗していたらページの読み込みに失敗しているかもしれないのでMicrosoft Edge を閉じる
        closeedge()
        Sleep 5000
    }

myahk/radikoplay.ahk at master · yasushiito/myahk


今日からはこのスタイルで運用します。


この記事に登場するAutohotkey スクリプトについて

この記事の中で私が作成したプログラムは、全て自由に使うことができます。
詳しくはこちら