jak dynamicznie generować kod HTML za pomocą WebBrowser lub mshtml.HTMLDocument .NET?

Większość odpowiedzi, które przeczytałem na ten temat, wskazuje na klasę System.Windows.Forms.WebBrowser lub interfejs COM mshtml.HTMLDocument z zestawu Microsoft HTML Object Library.

Klasa WebBrowser nie prowadzi mnie nigdzie. Poniższy kod nie może pobrać kodu HTML renderowanego przez moją przeglądarkę internetową:

[STAThread]
public static void Main()
{
    WebBrowser wb = new WebBrowser();
    wb.Navigate("https://www.google.com/#q=where+am+i");

    wb.DocumentCompleted += delegate(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)wb.Document.DomDocument;
        foreach (IHTMLElement element in doc.all)
        {
                    System.Diagnostics.Debug.WriteLine(element.outerHTML);
        }     
    };
    Form f = new Form();
    f.Controls.Add(wb);
    Application.Run(f);
} 

Powyższe jest tylko przykładem. Nie jestem zainteresowany znalezieniem obejścia dla określenia nazwy miejscowości, w której się znajduję. Po prostu muszę zrozumieć, jak programowo pobrać ten rodzaj dynamicznie generowanych danych.

(Zadzwoń do nowego System.Net.WebClient.DownloadString (”https://www.google.com/#q=where+am+i„), zapisz gdzieś wynikowy tekst, wyszukaj nazwę miejscowości, w której się aktualnie znajdujesz, i daj mi znać, jeśli byłeś w stanie go znaleźć.)

Ale jeszcze kiedy mam dostęp ”https://www.google.com/#q=where+am+i„z mojej przeglądarki internetowej (tj. firefox) Widzę nazwę mojego miasta zapisaną na stronie internetowej. W Firefoksie, jeśli kliknę prawym przyciskiem myszy nazwę miasta i wybieram„ Inspect Element (Q) ”, wyraźnie widzę nazwę miasta zapisanego w kodzie HTML, który wygląda zupełnie inaczej niż surowy kod HTML zwracany przez WebClient.

Po tym, jak zmęczyło mnie granie w System.Net.WebBrowser, postanowiłem dać mshtml.HTMLDocument strzał, by skończyć z tym samym bezużytecznym, surowym HTML:

public static void Main()
{
    mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)new mshtml.HTMLDocument();
    doc.write(new System.Net.WebClient().DownloadString("https://www.google.com/#q=where+am+i"));

    foreach (IHTMLElement e in doc.all)
    {
            System.Diagnostics.Debug.WriteLine(e.outerHTML);
    }
} 

Przypuszczam, że musi istnieć elegancki sposób na uzyskanie tego rodzaju informacji. W tej chwili wszystko, o czym mogę myśleć, to dodanie formantu WebBrowser do formularza, przejście do danego adresu URL, wysłanie kluczy „CLRL, A” i skopiowanie wszystkiego, co się dzieje na stronie, do schowka i próba parsuj to. Ale to straszne rozwiązanie.

questionAnswers(2)

yourAnswerToTheQuestion