로그인 후 Htmlagilitypack

c# facebook html-agility-pack httprequest

문제

나는 facebook 같이 어떤 html 위치를 분석하고 싶다,
Forexample (www.facebook.com/somePage)
이 링크를 내 탐색기에 붙여 넣으려면 내 계정으로 먼저 리디렉션됩니다. 그래서 나는 그 페이지를 본다. 그래서 나는 Htmlagilitypack을 사용하여 응답을 얻지 못한다.
그래서 어떻게 처음 웹 브라우저 컨트롤을 사용하지 않고 programmaticaly 사이트에 로그인 한 다음 페이스 북 페이지를 호출하고 응답을 얻고 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() 을 호출하여 내용을 가져올 수있는 WebResponse 객체가 생성됩니다.

Facebook은 HTML 콘텐츠를 거의 반환하지 않으므로 (브라우저에서 Javascript를로드하여 Document를 생성 함) HtmlAgilityPack이 도움이되지 않습니다. 자바 스크립트를 다운로드하지만 실행할 수 없으므로 해석하기 어려운 문서가 붙어 있습니다.

Awesonium 이나 PhantomJS 와 같은 다른 Html 패키지는 실제로 Javascript를 실행하고 해석 된 HtmlDomDocument를 반환 할 수 있습니다. 이것들은 당신이 전체 브라우저를 실행할 것을 요구하지 않을 것이고, Headless를 실행할 수도 있습니다 (UI가없는 브라우저를 실행하기 위해 호출 됨).

또는 페이 스북 그래프 API 를 사용하여 HTML을 파싱하지 않고 페이스 북의 데이터에 액세스 할 수 있습니다. 페이스 북 의 데이터와 상호 작용하는 정확한 목적을 위해 훨씬 안정적이며 내장되어 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.