質問: C#側からすでに開いているEdge画面を操作する方法についてご教示願います。 **やりたいこと** 1すでに開いているEdge(複数画面)から、一つの必要な画面を特定する 2Edge画面のDOMを取得する 3Edge画面の項目の値を検証し、間違ったら、該当項目に色を付ける 4C#からEdge画面の遷移を発生させ、必要なデータを取得してから、 元のEdge画面に戻る。 5Edgeの画面でのボタン押下(Link 押下)イベントを検知し、 押下するタイミングに合わせて、C#側で処理を行わせる Selenium WebDriverから操作しようとしたが、既存Edge画面を一回閉じて WebDriverからEdgeプロセスを新規で起動して、必要な画面を開かなければならない。 (現在の調査では)WebDriverからは【やりたいこと1】を実現できませんでした。 **質問** 1. SeleniumWebDriverから既存Edge画面を閉じずに、そのままキャッチして、 DOMを取得し、更に、該当項目に背景色つけることは可能でしょうか? 2. 他にネイティブ部品、もしくは、サードパーティ製の部品で、 やりたいことを実現できる方法はあるでしょうか? 3. セキュリティの側面からして、そもそも、EdgeはIE11(mshtml.dll、 SHDocVw.InternetExplorer等で操作する)のように外部操作できないでしょうか?
回答: > > 1. SeleniumWebDriverから既存Edge画面を閉じずに、そのままキャッチして、 > > DOMを取得し、更に、該当項目に背景色つけることは可能でしょうか? > > > Seleniumの開発途中に実現できていた時もあったようですが、ブラウザ個別の特定モード/構成時のみなので、「実現不可能」状態のようです。 Can Selenium interact with an existing browser session? Allow webdriver to attach to a running browser #18 その特定モードは、Chrome/Firefoxや次の?Edgeでは、デバッグポートを有効にして起動したブラウザと通信して操作が出来るという、これのことかも。 Microsoft Edge DevTools Protocol Clients How to connect Selenium to an existing browser that was opened manually? デスクトップ版 Firefox のデバッグを行う 他に古い版数のSeleniumの機能に、こんなのがあるようです。 Selenium Remote-Control / Selenium 1 (Selenium RC) - Selenium Documentation > > 2. 他にネイティブ部品、もしくは、サードパーティ製の部品で、 やりたいことを実現できる方法はあるでしょうか? > 3. セキュリティの側面からして、そもそも、EdgeはIE11(mshtml.dll、 > > SHDocVw.InternetExplorer等で操作する)のように外部操作できないでしょうか? > > > コメントで紹介した【2017年8月版】起動中のMicrosoft EdgeからタイトルとURLを取得するC#コードの方法で、DOMのオブジェクト(IHTMLDocument2), IHTMLDocument3)等) が取得できましたし、単純なページで IHTMLDocument2::fgColor により文字色を変えるとかが出来ました。 細かい要素の検索とか変更は、IHTMLDocument3のオブジェクトを取得して操作した方が良いのでしょう。 C++での話ですが、こんな記事があります。 MSHTML / ドキュメントとエレメント - EternalWindows IHTMLDocument3オブジェクト取得は、紹介先のIHTMLDocument2オブジェクト取得ルーチンの中で使っているGUIDをIHTMLDocument3のものに変えることで出来ます。 GUIDは open-watcom-v2/bld/w32api/lib/uuid.c とか mingw-w64/mingw-w64-crt/libsrc/mshtml-uuid.c から調べてください。 ただし、Edgeの1つのウィンドウに複数のタブがあって、表示してから時間が経過した場合、アクティブでないタブの情報は取れなくなっていました。 1ウィンドウ1タブにするよう注意しておいた方が良いでしょう。 なお新しいEdgeは来年に出るそうで、しかも勝手にモードが切り替わるようなので、今上記のことが出来たとしても、何か不具合が起こる可能性は大きいですね。 Chromiumベースの「Microsoft Edge」には「IE mode」あり ChromiumベースのMicrosoft Edge、2020年5月から切り替え開始か