Htmlagilitypack после входа в систему

c# facebook html-agility-pack httprequest

Вопрос

Я хочу проанализировать некоторые html-сайты, такие как facebook,
Forexample (www.facebook.com/somePage)
Если я хочу вставить эту ссылку в мой проводник, она перенаправляет меня сначала для входа в мою учетную запись. Поэтому я не вижу эту страницу. Поэтому я не могу использовать Htmlagilitypack, чтобы получить ответ.
Итак, как я могу сначала войти на сайт programmaticaly (без использования управления веб-браузером), тогда позвоните на эту страницу facebook и получите ответ и проанализируйте пакет Htmlagility. Я знаю, как я могу использовать пакет HtmlAgility, и я знаю, как устанавливать файлы cookie с помощью Httprequest. Я использую следующий код для установки файлов cookie, но после этого, как я могу разобрать эту страницу

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 . Это дает объект WebResponse на который вы можете вызвать GetResponseStream() чтобы перейти к содержимому.

Поскольку Facebook не возвращает почти никакого содержимого HTML (они отправляют загрузку Javascript для браузера, чтобы сгенерировать документ), HtmlAgilityPack действительно не поможет вам. Он загрузит Javascript, но не сможет его выполнить, поэтому вы застряли в документе, который трудно интерпретировать.

Другие пакеты Html, такие как Awesonium или PhantomJS, могут фактически выполнять Javascript и возвращать вам интерпретируемый HtmlDomDocument. Они не потребуют от вас запуска всего браузера, они могут запускать Headless (так как он вызывается для запуска браузера без пользовательского интерфейса поверх него).

В качестве альтернативы, используйте API-интерфейс Facebook для доступа к данным на facebook без разбора HTML-кода, он намного более стабилен и построен для конкретной цели взаимодействия с данными на facebook.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow