実現したいこと
.NET の WebView2 機能を使用し、PowerApps で開発された社内ウェブアプリケーションの自動化を行いたい。
具体的には、.NET のコンポーネントとして WebView2 と呼ばれる、アプリケーションに Edge のブラウザを組み込める機能、並びに、任意の javascript を実行できるメソッド ExecuteScriptAsync があるため、本コンポーネント/メソッドを使用しウェブアプリケーション側で求められる入力フォームに値を自動で入力する仕組みを実装しようとしている。
現在発生している問題
下記のサイトなどを参考にし、javascript で任意のフォームへの値の入力の実装方法については理解しましたが、当該社内ウェブアプリケーションではうまくいきません。
https://noitalog.tokyo/wpf-webview2-auto-login/
WebView2 側で実行する javascript のデバッグ方法がわからないため、ブラウザの開発者コンソールで当該 javascript を実行して確認したところ、以下のように null に対して値を入力しようとしていることからエラーになっていたことが確認できました。
javascript
document.querySelector("#publishedCanvas > div > div.screen-animation.animated > div > div > div:nth-child(20) > div > div > div > div > input").value="ABCD"
VM145:1 Uncaught TypeError: Cannot set properties of null (setting 'value') at <anonymous>:1:151
JSPath に誤りはないことは確認済みです。
さらに調べたところ、Javascript の Javascript コンテキスト?が違っているらしく、本コンテキストを既定の "top" から "fullscreen-app-host (preloadindex)" に変更した上で、同一の javascriptをコンソールで実行したところ、エラーにならずに想定通りフォームに値が入力されることが確認できました。
<図1. ブラウザ開発者コンソール画面>
ご教授いただきたい点
Javascript のメソッド、もしくは、WebView2 側の Javascript の呼び出し方を工夫することで、任意の javascript コンテキストを指定して javascript のコードを実行する方法についてご教授いただければと思います。
(javascript コンテキストについて調べてみましたがあまり情報は見つからず、断片的な情報からスコープ的なものかなという認識です。そのため、javascript 側のコードから任意のコンテキストを選択するのは難しいのではと思っています。)
なお、本社内ウェブアプリケーション側を直接実装を変更すれば簡単なのですが、こちら側は他部署なども共通で使っているツールで実装変更が許可されていないため、今回のように自前のアプリケーションにブラウザを組み込み、そこで操作をするという方法を取っています。
補足情報(FW/ツールのバージョンなど)
フレームワーク: .NET 6.0
使用言語: C#
WebView2 のバージョン: 1.0.1264.42 (220803時点の最新)
よろしくお願いいたします。
まだ回答がついていません
会員登録して回答してみよう