2

Web ページに情報を入力し、リダイレクトされた次のページを読み、さらにアクションを実行できるようにする必要があるプロジェクトが進行中です。単純化された実世界の例は、google.com にアクセスし、検索基準として「コーディング トリック」を入力し、結果のページを読むようなものです。

http://www.csharp-station.com/HowTo/HttpWebFetch.aspxにリンクされているような小さなコーディング例は、Web ページの読み方を示していますが、フォームに情報を送信して続行することによって Web ページとやり取りする方法は示していません。次のページへ。

記録として、私は悪意のある製品やスパム関連の製品を構築していません。

では、最初にアクセスするために通常のブラウジングのいくつかのステップを必要とする Web ページを読むにはどうすればよいでしょうか?

4

4 に答える 4

5

プログラムで Http リクエストを作成し、レスポンスを取得できます。

 string uri = "http://www.google.com/search";
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";

        // encode the data to POST:
        string postData = "q=searchterm&hl=en";
        byte[] encodedData = new ASCIIEncoding().GetBytes(postData);
        request.ContentLength = encodedData.Length;

        Stream requestStream = request.GetRequestStream();
        requestStream.Write(encodedData, 0, encodedData.Length);

        // send the request and get the response
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {

            // Do something with the response stream. As an example, we'll
            // stream the response to the console via a 256 character buffer
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                Char[] buffer = new Char[256];
                int count = reader.Read(buffer, 0, 256);
                while (count > 0)
                {
                    Console.WriteLine(new String(buffer, 0, count));
                    count = reader.Read(buffer, 0, 256);
                }
            } // reader is disposed here
        } // response is disposed here

もちろん、Google は検索クエリに POST ではなく GET を使用するため、このコードはエラーを返します。

URL と POST データはすべて基本的にハードコーディングされているため、この方法は特定の Web ページを扱っている場合に有効です。もう少し動的なものが必要な場合は、次のようにする必要があります。

  1. ページをキャプチャする
  2. フォームを剥がす
  3. フォーム フィールドに基づいて POST 文字列を作成する

FWIW、Perl や Python のようなものがその種のタスクにより適していると思います。

編集: x-www-form-urlencoded

于 2008-09-25T19:29:25.523 に答える
3

Seleniumを試してみてください。Selenium IDE を使用して Firefox でアクションを記録し、スクリプトを C# 形式で保存してから、Selenium RC C# ラッパーを使用して再生します。他の人が言及したように、 System.Net.HttpWebRequestまたはSystem.Net.WebClientも使用できます。これがデスクトップ アプリケーションの場合は、System.Windows.Forms.WebBrowserも参照してください。

補遺: Java ベースの Selenium IDE および Selenium RC と同様に、WatiN Test RecorderおよびWatiNは .NET ベースです。

于 2008-09-25T21:29:38.650 に答える
2

必要なことは、チェーン内の各ページの html ソースを取得して分析し続けることです。ページごとに、フォーム送信がどのように見えるかを把握し、それに一致するリクエストを送信して、チェーンの次のページを取得する必要があります。

私がしているのは、System.Net.HttpWebRequest/HttpWebResponse をラップするカスタム クラスを構築することです。そのため、ページの取得は System.Net.WebClient を使用するのと同じくらい簡単です。ただし、私のカスタム クラスはリクエスト間で同じ Cookie コンテナを保持し、投稿データの送信、ユーザー エージェントのカスタマイズなどを少し簡単にします。

于 2008-09-25T18:56:45.367 に答える
0

Web サイトの仕組みに応じて、URL を操作して必要な操作を実行できます。たとえば、「ビートルズ」という単語を検索するには、google.com?q=beetles へのリクエストを開き、結果を読むだけです。

または、Web サイトがクエリ文字列値 (url) を使用してページ アクションを処理しない場合は、代わりに必要な値を Web サイトにポストする Web リクエストに取り組む必要があります。WebRequest と Webresponse の操作については、Google で検索してください。

于 2008-09-25T18:57:34.977 に答える