我正在尝试System.Windows.Forms.HTMLDocument
在控制台应用程序中使用.首先,这甚至可能吗?如果是这样,我如何将网页从网页加载到其中?我试图使用WebBrowser
,但它告诉我:
未处理的异常:System.Threading.ThreadStateException:无法实例化ActiveX控件'885 6f961-340a-11d0-a96b-00c04fd705a2',因为当前的读取不在单线程单元中.
关于该HTMLDocument
对象似乎缺乏相关教程(或者谷歌只是提出了无用的结果).
刚刚发现mshtml.HTMLDocument.createDocumentFromUrl
,但那引起了我的兴趣
未处理的异常:System.Runtime.InteropServices.COMException(0x80010105):服务器抛出异常.(来自HRESULT的异常:0x80010105(RPC_E_SERVERF AULT))at System.RuntimeType.ForwardCallToInvokeMember(String memberName,BindingFla gs flags,Object target,Int32 [] aWrapperTypes,MessageData&msgData)at mshtml.HTMLDocumentClass.createDocumentFromUrl(String bstrUrl,String bstr Options) at iget.Program.Main(String [] args)
对于那些好奇的人,这是我想出的解决方案,感谢TrueWill:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using HtmlAgilityPack; namespace iget { class Program { static void Main(string[] args) { WebClient wc = new WebClient(); HtmlDocument doc = new HtmlDocument(); doc.Load(wc.OpenRead("http://google.com")); foreach(HtmlNode a in doc.DocumentNode.SelectNodes("//a[@href]")) { Console.WriteLine(a.Attributes["href"].Value); } } } }
TrueWill.. 6
作为替代方案,您可以使用免费的Html Agility Pack库.这可以解析HTML并允许您使用LINQ查询它.我在家里使用旧版本的项目,效果很好.
编辑:您可能还想使用WebClient或WebRequest类来下载网页.请参阅我在.NET上进行Web抓取的博客文章.(请注意,我没有在控制台应用程序中尝试过此操作.)
作为替代方案,您可以使用免费的Html Agility Pack库.这可以解析HTML并允许您使用LINQ查询它.我在家里使用旧版本的项目,效果很好.
编辑:您可能还想使用WebClient或WebRequest类来下载网页.请参阅我在.NET上进行Web抓取的博客文章.(请注意,我没有在控制台应用程序中尝试过此操作.)