2015-11-04 93 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();''。它将工作而不会改变其他任何东西。虽然如果你的意思是没有打开任何窗户,我对这一个运气不太好。 –