7

ログインフォームを使用しているWebサイトに関連するプロセスを自動化する必要があります。ログインページに続くページでいくつかのデータをキャプチャする必要があります。

通常のページをスクリーンスクレイピングする方法は知っていますが、安全なサイトの背後にあるページは知りません。

  1. これは.NETWebClientクラスで実行できますか?
    • 自動的にログインするにはどうすればよいですか?
    • 他のページにログインし続けるにはどうすればよいですか?
4

4 に答える 4

9

1 つの方法は、ブラウザーを自動化することです。あなたは WebClient について言及したので、.NET で WebClient を参照している可能性があると思います。

2 つの主なポイント:

  • WebClient に関連する https について特別なことは何もありません - 動作するだけです
  • 通常、Cookie は認証を行うために使用されます。Cookie を取得して再生する必要があります。

私が従うべき手順は次のとおりです。

  1. ログイン フォームを取得し、応答で Cookie を取得します。
  2. Xpath と HtmlAgilityPack を使用して、「input type=hidden」フィールドの名前と値を見つけます。
  3. リクエスト本文にユーザー名、パスワード、非表示フィールドの値を含むログイン フォームのアクションへの POST。リクエスト ヘッダーに Cookie を含めます。繰り返しますが、応答で Cookie をキャプチャします。
  4. 要求ヘッダーの Cookie を使用して、必要なページを取得します。

ステップ 2 では、ログインを自動化するやや複雑な方法について説明します。通常、初期フォームを取得したり非表示フィールドをリレーしたりすることなく、既知のログイン フォーム アクションにユーザー名とパスワードを直接投稿できます。一部のサイトでは、フォームにフォーム検証 (フィールド検証とは異なります) があり、このメソッドが機能しません。

HtmlAgilityPackは、不適切な形式の html を XmlDocument に変換できる .NET ライブラリであり、XPath を実行できます。非常に便利です。

最後に、フォームが送信前にフォームの値を変更するためにクライアント スクリプトに依存している状況に遭遇する可能性があります。この動作をシミュレートする必要がある場合があります。

この種の作業の http トラフィックを表示するツールを使用すると、非常に役立ちます。ieHttpHeadersFiddler、またはFireBug (net タブ) をお勧めします。

于 2008-09-07T08:02:03.853 に答える
1

ユーザー入力を簡単にシミュレートできます。post\get リクエストを Web サイトに送信することで、プログラムから Web ページにフォームを送信できます。
一般的なログイン フォームは次のようになります。

<form name="loginForm" method="post" Action="target_page.html">
   <input type="Text" name="Username">
   <input type="Password" name="Password">
</form>

ユーザー名とパスワードのフィールドに値を指定して、Web サイトにポスト リクエストを送信できます。リクエストを送信した後に何が起こるかは、Web サイトによって大きく異なります。通常は、特定のページにリダイレクトされます。認証情報は、セッション\cookie に保存されます。したがって、クライアントが Web セッションを維持できる場合、または Cookie を理解できる場合は、保護されたページにアクセスできます。

あなたの質問からは、どの言語\フレームワークを使用するのか明確ではありません。たとえば、perl で書かれたスクリーン スクレイピング (ログイン機能を含む) のフレームワークがあります - WWW::Mechanize

ログインしようとしているサイトが Java スクリプトやある種の CAPTCHA を使用している場合、いくつかの問題に直面する可能性があることに注意してください。

于 2008-09-07T07:51:24.223 に答える
0

明確にしていただけますか?あなたが話している WebClient クラスは HTTPUnit/Java のものですか?

その場合、セッションは自動的に保存されます。

于 2008-09-07T07:55:54.493 に答える
0

あなたの質問からは、あなたが参照している WebClient クラス (または言語) が明確ではありません。

Java ランタイムがある場合は、Apache HttpClient クラスを使用できます。SSL経由でおいしいAPIにアクセスするGroovyを使用して書いた例を次に示します。

   def client = new HttpClient()

   def credentials = new UsernamePasswordCredentials( "username", "password" )
   def authScope = new AuthScope("api.del.icio.us", 443, AuthScope.ANY_REALM)
   client.getState().setCredentials( authScope, credentials )

   def url = "https://api.del.icio.us/v1/posts/get"

   def method = new PostMethod( url )
   method.addParameter( "tag", tag )
   client.executeMethod( method )
于 2008-09-07T08:13:20.567 に答える