Как динамически генерировать HTML-код, используя .NET WebBrowser или mshtml.HTMLDocument?

Большинство ответов, которые я прочитал относительно этой темы, указывают либо на класс System.Windows.Forms.WebBrowser, либо на интерфейс COM mshtml.HTMLDocument из сборки библиотеки объектов Microsoft HTML.

Класс WebBrowser никуда меня не привел. Следующий код не может получить HTML-код, отображаемый моим веб-браузером:

[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);
} 

Выше приведен только пример. Я не очень заинтересован в поиске обходного пути для определения названия города, в котором я нахожусь. Мне просто нужно понять, как программно получать такие динамически сгенерированные данные.

(Вызовите новый System.Net.WebClient.DownloadString ("https://www.google.com/#q=where+am+i"), сохраните полученный текст где-нибудь, найдите название города, в котором вы сейчас находитесь, и дайте мне знать, если вы смогли его найти.)

Но все же, когда я получаю доступhttps://www.google.com/#q=where+am+i«В моем веб-браузере (то есть или в Firefox) я вижу название своего города, написанное на веб-странице. В Firefox, если я щелкну правой кнопкой мыши на названии города и выберу« Проверить элемент (Q) », я отчетливо вижу название города, написанного в HTML-коде, который выглядит совсем не так, как необработанный HTML-код, возвращаемый WebClient.

После того, как я устал играть в System.Net.WebBrowser, я решил попробовать mshtml.HTMLDocument, чтобы в итоге получить тот же бесполезный необработанный 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);
    }
} 

Я полагаю, что должен быть элегантный способ получить такую информацию. Прямо сейчас все, что я могу придумать, это добавить элемент управления WebBrowser в форму, перейти к соответствующему URL-адресу, отправить ключи «CLRL, A» и скопировать все, что отображается на странице, в буфер обмена и попытаться разбери это. Это ужасное решение, хотя.

Ответы на вопрос(2)

Ваш ответ на вопрос