Htmlagilitypack dopo il login

c# facebook html-agility-pack httprequest

Domanda

Voglio analizzare un sito html come Facebook,
Forexample (www.facebook.com/somePage)
Se voglio incollare questo link al mio explorer, mi reindirizza per prima cosa ad accedere al mio account. Quindi non vedo quella pagina. Quindi non posso usare Htmlagilitypack per ottenere risposta.
Quindi, come posso prima accedere al sito programmaticaly (senza utilizzare il controllo di webbrowser), quindi chiamare quella pagina di Facebook e ottenere risposta e analizzare con il pacchetto Htmlagility. So come posso utilizzare il pacchetto HtmlAgility e so come impostare i cookie con Httprequest I Usa il seguente codice per impostare i cookie, ma dopo di ciò come posso analizzare quella pagina

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);
        }

Risposta accettata

Sulla tua HttpWebRequest chiama il metodo GetResponse . Ciò produce un oggetto WebResponse su cui è possibile chiamare GetResponseStream() per ottenere i contenuti.

Dato che Facebook non restituisce quasi nessun contenuto HTML (inviano un carico di Javascript per il browser per generare il documento), HtmlAgilityPack non ti aiuterà veramente. Scaricherà Javascript, ma non può eseguirlo, quindi sei bloccato con un documento che è difficile da interpretare.

Altri pacchetti Html, come Awesonium o PhantomJS, possono effettivamente eseguire il Javascript e restituire l'HtmlDomDocument interpretato. Questi non richiedono l'esecuzione dell'intero browser, possono entrambi eseguire Headless (come viene chiamato per eseguire un browser senza UI su di esso).

In alternativa, utilizza l' API di Facebook Graph per accedere ai dati su Facebook senza analizzare il codice HTML, è molto più stabile e costruito per lo scopo esatto di interagire con i dati su Facebook.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché