ログインフォームを使用しているWebサイトに関連するプロセスを自動化する必要があります。ログインページに続くページでいくつかのデータをキャプチャする必要があります。
通常のページをスクリーンスクレイピングする方法は知っていますが、安全なサイトの背後にあるページは知りません。
- これは.NETWebClientクラスで実行できますか?
- 自動的にログインするにはどうすればよいですか?
- 他のページにログインし続けるにはどうすればよいですか?
ログインフォームを使用しているWebサイトに関連するプロセスを自動化する必要があります。ログインページに続くページでいくつかのデータをキャプチャする必要があります。
通常のページをスクリーンスクレイピングする方法は知っていますが、安全なサイトの背後にあるページは知りません。
1 つの方法は、ブラウザーを自動化することです。あなたは WebClient について言及したので、.NET で WebClient を参照している可能性があると思います。
2 つの主なポイント:
私が従うべき手順は次のとおりです。
ステップ 2 では、ログインを自動化するやや複雑な方法について説明します。通常、初期フォームを取得したり非表示フィールドをリレーしたりすることなく、既知のログイン フォーム アクションにユーザー名とパスワードを直接投稿できます。一部のサイトでは、フォームにフォーム検証 (フィールド検証とは異なります) があり、このメソッドが機能しません。
HtmlAgilityPackは、不適切な形式の html を XmlDocument に変換できる .NET ライブラリであり、XPath を実行できます。非常に便利です。
最後に、フォームが送信前にフォームの値を変更するためにクライアント スクリプトに依存している状況に遭遇する可能性があります。この動作をシミュレートする必要がある場合があります。
この種の作業の http トラフィックを表示するツールを使用すると、非常に役立ちます。ieHttpHeaders、Fiddler、またはFireBug (net タブ) をお勧めします。
ユーザー入力を簡単にシミュレートできます。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 を使用している場合、いくつかの問題に直面する可能性があることに注意してください。
明確にしていただけますか?あなたが話している WebClient クラスは HTTPUnit/Java のものですか?
その場合、セッションは自動的に保存されます。
あなたの質問からは、あなたが参照している 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 )