2011-11-12 56 views
1

ほとんどの内部サイトとは異なるサーバーでホストされている社内サイトがあります。サイトは、私がスクリーンスクレイピングで取得したい情報を出力します。私はasp.net(C#)ページと他の内部サイト上のHTTPWebRequestを使用してスクリーンスクレイピングを行ってきましたが、ほとんどの場合とは異なり、このサイトはユーザー名とパスワードを必要とします。ログインページと誰もが同じログイン情報を使用します。画面スクレイピングのためにサイトに自動的にログイン

私はWeb上で自動ログインを行ういくつかの例を見てきましたが、それらのどれも私が必要とするものはありませんでした。私はaspxページを使用してサイトにログインし、次のページからデータを取得したい。

私が見た例では、Cookieを生成し、HTTPWebRequestストリームにログインデータを投稿しています。私は本当にこの場合にこれを行う方法がわかりません。

フォームフィールドに入力してsubmitwボタンを実行することは可能ですか(プログラマチックおよびバックグラウンド)。ここで

は、ログインページのコードの一部です:

<script> 
//StartTranslate:NetLanguage 

        function window_onload() { 
                  deleteCookie("BodyURL","/Net",0); 
                  
                  document.loginform.UserName.focus(); 
                  document.loginform.UserName.value=sUserName; 
                  document.loginform.UserName.select(); 
        } 

        function doSubmit()     { 
                var sUserName = SMCookieGetUserName(); 
                loginform.submit(); 
        } 
</script> 




<form name="loginform" action="/Net//netportal.dll/SubmitLogin" method="post" > 

                <input class="textbox" type="text" name="UserName" id="UserName" maxlength="128" tabindex="1" >                                 
                <input class="textbox" type="password" name="Password" id="Password" maxlength="128" tabindex="2" > 
                <img onClick="doSubmit();" src='/net/PortalPages/Images/slogin.gif' onselectstart="return false;" tabindex="3">                                                                                                                                 
                
                <input type="hidden" value="" name="Timezone"> 
                <input type="hidden" value="" name="redirect"> 
                <input type="hidden" value="true" name="ExplicitLogin"> 
</form> 
+0

可能重複使用に見えるかもしれません[C#でasp.netのフォーム・ログインとスクリーン・スクレイピングサイト?](http://stackoverflow.com/questions/901045/screen- scraping-a-site-with-a-asp-net-form-login-in-c) –

答えて

0

私はあなただけのサーバーに直接ブラウザではなく、希望の道をポストを呼び出す必要があると思います。このようなアプリケーションと思うだろうhtmlで混乱しようとしているのです。予想されるフォームの値をアクションURLに投稿すればいいだけです。

あなたのコードでは、/Net//netportal.dll/SubmitLoginへのポストコールを作成し、 UserNameとPasswordを入力し、サーバーがログインした後にスクレイピングを開始します。ここでは、始めるために使用できるコードの例を示します。あなたものhtmlagilitypack http://htmlagilitypack.codeplex.com/

private static string Post (string Url, string Method, string Content, string ContentType = "application/json", WebHeaderCollection headers = null) 
    { 
     var address = new Uri(Url); 
     var request = WebRequest.Create(address) as HttpWebRequest; 

     request.Method = Method; 

     if (headers != null) 
      request.Headers.Add(headers); 

     if (!String.IsNullOrEmpty(Content)) 
     { 
      var bytes = Encoding.UTF8.GetBytes(Content); 

      request.ContentLength = bytes.Length; 
      request.ContentType = ContentType; 

      using (var pStream = request.GetRequestStream()) 
      { 
       pStream.Write(bytes, 0, bytes.Length); 
      } 
     } 

     using (var response = request.GetResponse() as HttpWebResponse) 
     { 
      var reader = new StreamReader(response.GetResponseStream()); 

      return reader.ReadToEnd(); 
     } 
    } 
関連する問題