C#.net Utilisation HTMLDocument à partir de la Console?

Je suis en train d'utiliser System.Windows.Forms.HTMLDocument dans une application console. Tout d'abord, est-ce même possible? Si oui, comment puis-je charger une page sur le web? J'ai essayé d'utiliser WebBrowser, mais il me dit:

Exception Non Gérée:
Système.Le filetage.ThreadStateException:
Contrôle ActiveX '885
6f961-340a-11d0-a96b-00c04fd705a2'
ne peut pas être instanciée parce que le
actuel th lire n'est pas dans un
single-threaded apartment.

Il semble y avoir un manque sévère de tutoriels sur le HTMLDocument objet (ou Google vient de tourner inutile de résultats).


Viens de découvrir mshtml.HTMLDocument.createDocumentFromUrl, mais qui me lève

Exception Non Gérée:
Système.Moment de l'exécution.InteropServices.COMException
(0x80010105): T il jeta un serveur
exception à la règle. (Exception de HRESULT:
0x80010105 (RPC_E_SERVERF AULT))
Système.RuntimeType.ForwardCallToInvokeMember(String
nomdumembre, BindingFla gs drapeaux,
Objet cible, Int32[] aWrapperTypes,
MessageData& msgData) à
mshtml.HTMLDocumentClass.createDocumentFromUrl(String
bstrUrl, Chaîne bstr Options)
iget.Programme.Main(String[] args)

Ce que le diable? Tout ce que je veux est une liste de <a> des étiquettes sur une page. Pourquoi est-ce si difficile?


Pour ceux qui sont curieux, voici la solution que j'ai trouvé, grâce à 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);
            }
        }
    }
}

OriginalL'auteur mpen | 2009-11-22