2015-11-04 88 views
-1

我需要能夠登錄到一個網站。最好能夠將登錄憑證保存在Cookie中。之後,我應該能夠瀏覽到網站,而在任何時候都能夠獲得htmldocument。需要能夠登錄和瀏覽網站從網站獲取htmlDocument

我已經在使用Html Agility Pack解析網站。如果我只是可以使用登錄憑據加載HtmlDocument,但是目前尚未能夠滿足,我們將感到滿意。我已經嘗試了HtmlWeb和HttpWebRequest。

var client = new WebClient(); 
client.Credentials = new NetworkCredential("myemail", "mypassword"); 
HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); 

// There are various options, set as needed 
htmlDoc.OptionFixNestedTags=true; 

HtmlWeb hw = new HtmlWeb(); 
WebProxy prox = new WebProxy(url); 
try{ 
    htmlDoc = hw.Load(url, "POST", prox, new NetworkCredential("myEMAIL", "mYPAssword")); 
}catch(HtmlWebException ex){ 
    Console.WriteLine("htmlParser.cs " + ex.Message); 
} 

它只是不會登錄。沒有錯誤消息。

try{ 
    var temp = new Uri(url); 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(temp); 
      request.Credentials = new NetworkCredential("myUsername", "myPassword"); 
    request.CookieContainer = myContainer; 
    request.PreAuthenticate = true; 

    request.Method = "POST"; 
    using (var response = (HttpWebResponse)request.GetResponse()) 
    { 
     using (var stream = response.GetResponseStream()) 
     { 
      htmlDoc.Load(stream, Encoding.GetEncoding("UTF-8")); 
     } 
    } 

}

+1

「我試過了」那你爲什麼不顯示你的代碼?請將此添加到您的問題中,並解釋它有什麼問題。 – mason

回答

1

對於這個任務,我會強烈建議Selenium。 Selenium不會僅僅希望你的代碼能夠正常工作,而是會像FirefoxPhantomJS這樣的無頭瀏覽器在常規瀏覽器中精確顯示發生了什麼。

如果你想這樣做,硒對web scraping也是一個很好的工具。

+1

我已經看過Selenium。有沒有辦法讓我從Selenium中獲取整個HtmlDocument作爲字符串。如果是這樣。那麼我一定會使用Selenium –

+1

我試過了一切!我甚至試圖在虛擬機上安裝Windows以創建WebBrowser類。然後我嘗試了WatiN。最後我投入並嘗試了Selenium。你是對的。這是最佳解決方案。安裝後,我花了不到5分鐘的時間來生成一些工作代碼。但我錯過了一件事。我不感興趣展示/瞭解瀏覽器中究竟發生了什麼。無論如何要隱藏它? –

+0

其實是的,你可以使用PhantomJS,就像我在回答中給你展示的那樣。而不是聲明像'var browser = new FirefoxDriver();'這樣的變量:''var browser = new PhantomJSDriver();''。它將工作而不會改變其他任何東西。雖然如果你的意思是沒有打開任何窗戶,我對這一個運氣不太好。 –