ログイン後のHtmlagilitypack

c# facebook html-agility-pack httprequest

質問

私はFacebookのようないくつかのhtmlサイトを解析したい、
(www.facebook.com/somePage)
このリンクをエクスプローラに貼り付ける場合は、最初に自分のアカウントにログインするようにリダイレクトされます。だから私はそのページを見ません。だから私は応答を得るためにHtmlagilitypackを使用することはできません。
だから私はどのように最初のサイトにログインすることができますprogrammaticaly(Webブラウザコントロールを使用せずに)その後、そのFacebookのページを呼び出して、応答を取得し、Htmlagilityのパックと解析します。私はどのように私はHtmlAgilityパックを使用することができますし、私はクッキーを設定するコード次のHttpRequest私の使用してクッキーを設定する知っているが、その後どのように私はそのsomePageを解析することができます知っています

CookieCollection cookies = new CookieCollection();
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.facebook.com");
            request.CookieContainer = new CookieContainer();
            request.CookieContainer.Add(cookies);
            //Get the response from the server and save the cookies from the first request..
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            cookies = response.Cookies;
            response.Close();
        }
        catch (WebException)
        {
            MessageBox.Show("error");
        }

        string getUrl = "https://www.facebook.com/login.php?login_attempt=1";
        string postData = String.Format("email={0}&pass={1}", "xxxx@hotmail.com", "xxxxx");
        HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(getUrl);
        getRequest.CookieContainer = new CookieContainer();
        getRequest.CookieContainer.Add(cookies); //recover cookies First request
        getRequest.Method = WebRequestMethods.Http.Post;
        getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
        getRequest.AllowWriteStreamBuffering = true;
        getRequest.ProtocolVersion = HttpVersion.Version11;
        getRequest.AllowAutoRedirect = true;
        getRequest.ContentType = "application/x-www-form-urlencoded";

        byte[] byteArray = Encoding.ASCII.GetBytes(postData);
        getRequest.ContentLength = byteArray.Length;
        Stream newStream = getRequest.GetRequestStream(); //open connection
        newStream.Write(byteArray, 0, byteArray.Length); // Send the data.
        newStream.Close();
        //How I parse (www.facebook.com/somePage) here?
       HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
       HttpWebResponse getResponse = (HttpWebResponse)getRequest.GetResponse();
       using (StreamReader sr = new StreamReader(getResponse.GetResponseStream(), Encoding.GetEncoding("windows-1251")))
        {

            doc.LoadHtml(sr.ReadToEnd());

        }

        foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]"))
        {
            listBox1.Items.Add(link.InnerHtml);
        }

受け入れられた回答

あなたにHttpWebRequest呼び出しGetResponseメソッドを。これにより、 GetResponseStream()を呼び出して内容にGetResponseStream()できるWebResponseオブジェクトが生成されます。

FacebookはHTMLコンテンツをほとんど返さないため(ブラウザからJavascriptを読み込んでDocumentを生成する)、HtmlAgilityPackは本当に役に立ちません。それはJavascriptをダウンロードしますが、実行できませんので、解釈が難しい文書が残っています。

AwesoniumPhantomJSのような他のHtmlパッケージは実際にJavascriptを実行し、解釈されたHtmlDomDocumentを返すことができます。これらはブラウザ全体を実行する必要はなく、Headlessを実行することもできます(上にUIなしでブラウザを実行するために呼び出されるため)。

Facebook Graph APIを使用して、HTMLを解析せずにFacebookのデータにアクセスすることができます。Facebookのデータとのやりとりを正確に行うために、より安定しています。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ