RPAといえば、操作記録ですよね。
これまで、W3C WebDriver APIの仕様なんかを掘ったりしましたが、
肝心の操作記録に関する仕様なんかはでてきませんでした。
W3C WebDriver APIをPowerShell制御まとめ①
これって要するに、WebDriverとしての仕様レベルでの実装ではなくその機能を組み込んだ実装側のどこかで操作記録の機能が作りこまれているってことですよね。
1.Power Automateを検証した時を思い出してみる。
Power Automateでは、ブラウザ操作にSelenium IDEが採用されてましたね。
Selenium IDEは、オープンソースなのでソースが誰でも見れる訳ですよ。
さっそくGit Hubからソースコードを開いてそっと覗いてみましょう。
・・・コードがいっぱい。英語だし意味わかりません?
しかし、今回知りたいのは操作記録がどうやって実装されてるのかってところ。
Selenium IDEで操作記録を開始する時のボタンは「Start Recording」だから、
とりあえず、「recording」でプロジェクト内を検索。。。
「recording.js」ってのが入ってますねぃ。
細かい理解は捨ててザーッと眺める。
browser.runtime.onMessage.addListener ...(略)... browser.tabs.sendMessage ...(略)... browser.tabs.onActivated.addListener ...(略)... browser.windows.onFocusChanged.addListener ...(略)... browser.tabs.onRemoved.addListener ...(略)... browser.webNavigation.onCreatedNavigationTarget.addListener
browserってオブジェクトから操作記録の香りをプンプン感じる記述が並んでます!
さて、そのbrowserオブジェクトの出自は?
import browser from 'webextension-polyfill'
1行目で、webextension-polyfillっていうのが読み込まれてます。
webextension-polyfillは、package.jsonで宣言されててYarn経由でインストールされてますね。
2.webextension-polyfillって何だ?
さすが、ググれば何でも解決できる時代。
すぐGit Hubがヒットしました。
W3 Browser Extensionsグループで標準化されているPromise-based WebExtension/BrowserExt APIっていうのを使って実装してるんだとか。
ちなみに、「Polyfill」っていうのは、
最近の機能をサポートしていない古いブラウザーで、その機能を使えるようにするためのコード
のことを言うらしい。
Promiseベースというのが、非同期処理を実装する為の仕組みだということは知ってる。
でも、実際詳しい実装やったことないんだよなぁ。
(WebDriverの非同期スクリプト実行の使い方も、よくわからずスキップして終わらせてた。)
ただ、要するにその非同期処理の機能を使ってWebDriver経由でイベントハンドラを仕込んでブラウザ操作の内容をフィードバックさせてるってことなのかな?
よし、次回からはPromiseの基礎から勉強しながらwebextension-polyfillのソースコードを咀嚼していきます。
おまけ。
Promise APIについてサラッと見ようとしたら、Googleのサイトみてほっこりした。
難しそうなセクションの目次を、こんなユーモアのある感じに仕上げてくれてる感じ、すごくいいと思った。