Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C.net是否从控制台使用HTMLDocument?_C#_.net_Console - Fatal编程技术网

C# C.net是否从控制台使用HTMLDocument?

C# C.net是否从控制台使用HTMLDocument?,c#,.net,console,C#,.net,Console,我正在尝试在控制台应用程序中使用System.Windows.Forms.HTMLDocument。首先,这可能吗?如果是这样,我如何将网页加载到其中?我试图使用WebBrowser,但它告诉我: 未处理的异常: System.Threading.ThreadStateException: ActiveX控件'885 6f961-340a-11d0-a96b-00c04fd705a2' 无法实例化,因为 当前th read不在a中 单线程公寓 HTMLDocument对象上似乎严重缺乏教程,或者

我正在尝试在控制台应用程序中使用System.Windows.Forms.HTMLDocument。首先,这可能吗?如果是这样,我如何将网页加载到其中?我试图使用WebBrowser,但它告诉我:

未处理的异常: System.Threading.ThreadStateException: ActiveX控件'885 6f961-340a-11d0-a96b-00c04fd705a2' 无法实例化,因为 当前th read不在a中 单线程公寓

HTMLDocument对象上似乎严重缺乏教程,或者Google只是找到了无用的结果

刚刚发现了mshtml.HTMLDocument.createDocumentFromUrl,但这让我

未处理的异常: System.Runtime.InteropServices.COMException 0x80010105:服务器引发错误 例外HRESULT的例外情况: 0x80010105 RPC_E_服务器故障位于 System.RuntimeType.ForwardCallToInvokeMemberString memberName,BindingFlags标志, 对象目标,Int32[]aWrapperTypes, MessageData和msgData位于 mshtml.HTMLDocumentClass.createDocumentFromUrlString bstrUrl,位于的字符串bstr选项 iget.Program.MainString[]参数

怎么回事?我想要的只是一份清单:


如果是xhtml,则将其加载到XDocument中并解析锚定标记,或者如果您只需要锚定标记,也可以使用RegEx进行解析。

将[STAThread]属性添加到主方法中

    [STAThread]
    static void Main(string[] args)
    {
    }

这应该可以解决问题。

作为替代方案,您可以使用免费的库。它可以解析HTML,并允许您使用LINQ进行查询。我在家里的一个项目中使用了一个旧版本,效果很好


编辑:您可能还希望使用WebClient或WebRequest类下载网页。请参阅我的博客文章。请注意,我还没有在控制台应用程序中尝试过这一点。

它不是XHTML。RegEx是一个黑客。。。我不知道我将使用的HTML格式有多不正确。我需要锚中的链接HREF。为什么regex是黑客?也很容易获得HREF+Regex很快。至于为什么在本例中Regex是一个黑客,请参阅《不熟悉LINQ》,但快速浏览该头版会提到XPATH,这很好!如果chris的解决方案不起作用,可能会尝试一下。@Mark:你不必使用LINQ-当我使用库时,该功能还没有添加。这仍然很容易。您可以创建一个XPathNavigator,调用Select并传入一个XPath字符串,然后迭代结果。SelectSingleNode是我使用的另一个主要方法。我在问题中添加了一些代码。在控制台中工作得很好:@Mark:谢谢!你的代码非常简洁。旁白:它可能与您的程序无关,但WebClient是可识别的。尽管如此,我认为它并不能解决问题。我创建了一个WebBrowser对象,然后导航到google.com。。我附加了一个DocumentCompleted事件处理程序,因此我知道它何时完成加载,但它永远不会被触发。事实上,程序几乎立即运行完成,这告诉我它根本没有等待页面加载。我认为它不喜欢单线程。看起来你还需要一个消息泵。看那听起来很恶心。仅仅从web上读取HTML文档就需要做太多的工作:谢谢。mshtml绝对不是为控制台使用而设计的。出于同样的原因,长期以来一直建议不要在服务器端应用程序中使用它。HTML agility pack是解析的一个很好的选择。
    [STAThread]
    static void Main(string[] args)
    {
    }