这与在脚本内(可能在脚本标签内)设置的cookie有关。
System.Windows.Forms.HtmlDocument执行这些脚本,并且可以通过其Cookies属性检索cookie集(如document.cookie=etc...)。

我假设HtmlAgilityPack.HtmlDocument不执行此操作(执行)。我想知道是否有一种简单的方法来仿真System.Windows.Forms.HtmlDocument功能(cookies部分)。

任何人?

最佳答案

当我需要一起使用Cookies和HtmlAgilityPack或仅创建自定义请求(例如,设置User-Agent属性等)时,这是我的工作:

  • 创建一个封装请求/响应的类。我们将此类称为WebQuery
  • 在该类
  • 中具有私有(private)的CookieCollection(在您的情况下为公共(public))属性
  • 在类内部创建一个手动执行请求的方法。签名可以是:

  • ...
    public HtmlAgilityPack.HtmlDocument GetSource(string url);
    

    在此方法中我们需要做什么?

    好吧,使用HttpWebRequest和HttpWebResponse,手动生成http请求(在Internet上有几个有关此操作的示例),并使用接收流的构造函数创建HtmlDocument类的实例。

    我们必须使用什么流? 好吧,返回者:
    httpResponse.GetResponseStream();
    

    如果使用HttpWebRequest进行查询,则可以在每次访问新页面之前轻松地将其CookieContainer属性设置为声明的变量,这样由您访问的网站设置的所有cookie都将正确存储在CookieContainer中您在WebQuery中声明的变量,算上您仅使用了WebQuery类的一个实例。

    希望您能从中找到有用的解释。考虑到使用此功能,无论HtmlAgilityPack是否支持它,您都可以做任何您想做的事情。

    关于javascript - HtmlAgilityPack.HtmlDocument Cookies,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5562948/

    10-11 10:50