私はいくつかの自動化作業を行っており、サイトを回避して HTML フォームに投稿することはできますが、今は新しい課題であるAjaxフォームに直面しています。
読むソースがないので、C# でプログラム的に Ajax フォームに記入することが可能かどうか疑問に思っています。現在、目に見えない axWebBrowser を使用しています。
よろしくお願いします。
私はいくつかの自動化作業を行っており、サイトを回避して HTML フォームに投稿することはできますが、今は新しい課題であるAjaxフォームに直面しています。
読むソースがないので、C# でプログラム的に Ajax フォームに記入することが可能かどうか疑問に思っています。現在、目に見えない axWebBrowser を使用しています。
よろしくお願いします。
はい。ただし、通常のページを含むサーバー ページと AJAX ハンドラー ページを要求/応答するには、別のアプローチを使用することをお勧めします。
C# では、WebRequest / WebResponseまたはより特化した HttpWebRequest/HttpWebResponse クラスを使用してみてください。
Ajax は、Javascript がサーバーに対して HTTP 要求を行うことを可能にするテクノロジーの「派手な」名前にすぎません。サーバーは通常、Javascript の呼び出し元に特化した軽量のコンテンツを生成するいくつかのハンドラーを実装します (通常は JSON としてエンコードされます)。
したがって、AJAX 呼び出しをシミュレートするには、ターゲット アプリケーション (「投稿」先の Web ページ) を検査し、AJAX 通信に使用される形式を確認し、ページの Javascript 動作を C# から複製するだけです。 WebREquest/WebResponse クラスを使用します。
Firebugを参照してください。これは、Web ページを調べて、Web ページが行う呼び出し、ページ、およびそれらのページが何に応答するかを判断できる優れたツールです。また、AJAX 呼び出しの検査にも優れた機能を発揮します。
Web リクエストを実行する方法の非常に簡単な例を次に示します。
HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create("http://www.mysite.com");
using (HttpWebResponse resp = (HttpWebResponse)wReq.GetResponse())
{
// NOTE: A better approach would be to use the encoding returned by the server in
// the Response headers (I'm using UTF 8 for brevity)
using (StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.UTF8))
{
string content = sr.ReadToEnd();
// Do something with the content
}
}
POST もリクエストですが、メソッドが異なります。非常に単純な投稿を行う方法の例については、このページを参照してください。
編集- Firebug を使用したページ動作の検査の詳細
複製しようとしているページを検査するということは、ツール (Firefox では Firebug を使用) を使用して、ページとサーバー間の情報の流れを判断するということです。
Firebug では、「ネット」パネルと「コンソール」パネルを使用してこれを行うことができます。ネット パネルには、ページのロード中にブラウザによって実行されたすべてのリクエストが一覧表示されます。「コンソール」には、ページが読み込まれた後に行われるページとサーバー間の通信が一覧表示されます。ページがロードされた後に行われる通信は、基本的に複製したい AJAX 呼び出しです (注: これを機能させるには、Firebug でネットワーク監視を有効にする必要があります)。
Firebug の詳細については、 Michael Sync のチュートリアルを確認し、AJAX リクエストの詳細については、コンソール パネルで実験してください。
「WebRequest/WebResponse を使用して C# からページの動作を複製する」に関しては、先に述べたように、Javascript AJAX 呼び出しは HTTP 要求にすぎないことを認識しておく必要があります。これは、Javacript が Web サーバーに対して「舞台裏」または帯域外で行う HTTP 要求です。これを複製するには、上で示した通常の GET または通常の POST を複製するのとまったく違いはありません。そして、これが Firebug の出番です。これを使用すると、Javascript が作成するリクエストを表示できます。コンソール パネルを見て、リクエスト メッセージがどのように表示されるかを確認してください。
次に、上記と同じ手法を使用して、HttpWebRequest/HttpWebResponse を使用して Javascript と同じタイプの要求を作成します。代わりに C# からのみ実行します。
グレッグ、これで私の答えが少し明確になることを願っていますが、これを超えて、Firebug で遊んで、HTTP プロトコルがどのように機能し、AJAX がテクノロジーとしてどのように機能するかについてもっと学ぶことをお勧めします。
Selenium の使用を見たことがありますか。私の知る限り、テスト ケースは C# で記述できます。テスターが以前に Ajax 対応の ASP.NET サイトの UI テストに C# を使用して成功したことは知っています。