5

こんにちは、私は少し前に Selenium を使用して、私が楽しんでいる Web サイトで自動化されたアクションを実行するプログラムを作成しました。

私が抱えていた唯一の問題は、バックグラウンドで使用することでした。

PC で行っていた他の作業に影響を与えずに使用することはできませんでした。仮想マシンを使用することも考えましたが、これを回避したいと考えています。

昨夜、私は C# で WebBrowser クラスをいじっていましたが、その素晴らしいが制限されていました。Windows フォーム アプリケーション内に自己完結していたので、これが私が探していたものです。

Windowsフォームアプリケーション内にブラウザの視覚的表現を統合する最良の方法を誰もが知っていますが、キー入力などを模倣することはできますが、バックグラウンドで実行されます.

WaitN、GekoFX、MozNet などについて聞いたことがありますが、読んだ限りでは、これらのどれもが機能するかどうかはわかりません。

4

2 に答える 2

7

一般に、ブラウザーを使用して Web ページを自動化しようとする場合、ユーザー イベントをシミュレートするには 2 つのオプションがあります。JavaScript を介してそれらをシミュレートするか、OS レベルのメカニズム (いわゆる「ネイティブ イベント」) を使用してマウスとキーボードのイベントをシミュレートすることができます。どちらのアプローチにも落とし穴があります。

JavaScript のみを使用してシミュレートされたイベントは、おそらく、自動化されているウィンドウが、システム フォーカスなしでバックグラウンドにとどまり、必要なタスクを実行することを可能にします。Selenium RC はこの方法を使用し、Selenium WebDriver は Firefox と IE でシミュレートされたイベントを使用する機能を提供します。ただし、このアプローチにはいくつかの欠点があります。シミュレートされたイベントは、必要な忠実度と精度に欠ける場合があります。たとえば、CSS:hover疑似セレクターを介して機能するページの「ドロップダウン メニュー」は、JavaScript を介してトリガーすることはできないため、このような場合、このアプローチは失敗する運命にあります。また、JavaScript を使用しているため、JavaScript サンドボックスに制限されます。つまり、クロスドメイン フレームなどは厳密に範囲外になる可能性があります。

一方、ネイティブ イベントは、ユーザーの実際のマウスおよびキーボード操作をより厳密に表しています。一般に、Web ページ上で正しいイベントを正しい順序で発生させることができます。どの要素でどのイベントを発生させるかを推測する必要はありません。それらを使用することの欠点は、それらを正しく実装するには、自動化されているウィンドウがイベントを正しく受け取るためにシステム フォーカスを持っている必要があることです。SendMessageWindows を使用している場合は、APIを使用してハッキングを試みることができますが、エラーが発生しやすく、動作が保証されていないため、これは間違った方法です。ネイティブ イベントを使用する正しい方法は、SendInputAPI ですが、その API は入力をシステム フォーカスのあるウィンドウに送信します。WebDriver はデフォルトでネイティブ イベントを使用してユーザー入力をシミュレートしますが、デフォルトでは欠陥のあるSendMessageアプローチになります。IE の場合、少なくとも、より正しいSendInputアプローチを使用するオプションが提供されます。

フォアグラウンドでブラウザー ウィンドウを必要としないことに固執している場合は、ヘッドレス オプションを検討する必要があります。PhantomJSは優れたオプションであり、WebDriver にもそのためのドライバーがあるため、自動化コードを C# で記述できます。それ以外の場合は、上記で概説した他のアプローチのいずれかに制限されます。

于 2013-02-25T16:53:57.293 に答える
1

アプリケーションをウィンドウ内でホストする必要がありますか?

私は自動化のためにセレン、ワティンを使用しましたが、残念ながらそれらはあなたがしていることを妨げており、これを回避する方法を見つけることができませんでした.

私も .NetWebBrowserクラスを使用しましたが、自動化のために、その中で実行されている JavaScript に関して、それが完全な機能を備えた IE であるかどうかをテストしないとわかりません。ただし、JavaScriptを実行すると思いますが、確認する必要があります。

何が起こっているのかを確認する必要がない場合は、Selenium でもヘッドレス オプションを利用できます 。Selenium RC でブラウザを非表示にすることは可能ですか?

実行可能な場合のヘッドレスバージョンのリストを次に示します。

https://gist.github.com/evandrix/3694955

于 2013-02-25T09:21:51.777 に答える