WebBrowser - пустой DocumentText - PullRequest
       1

WebBrowser - пустой DocumentText

2 голосов
/ 16 декабря 2011

Я пытаюсь использовать WebBrowser класс, но, конечно, он не работает.

Мой код:

WebBrowser browser = new WebBrowser();
browser.Navigate("http://www.google.com");

while(browser.DocumentText == "")
{
    continue;
}
string html = browser.DocumentText;

browser.DocumentText всегда "".Почему?

Ответы [ 5 ]

5 голосов
/ 16 декабря 2011

Вы должны использовать событие DocumentCompleted, а если у вас нет приложения WebForms, может также понадобиться ApplicationContext.

static class Program
{
    [STAThread]
    static void Main()
    {
        Context ctx = new Context();
        Application.Run(ctx);

        // ctx.Html; -- your html
    }
}

class Context : ApplicationContext
{
    public string Html { get; set; }

    public Context()
    {
        WebBrowser browser = new WebBrowser();
        browser.AllowNavigation = true;
        browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);
        browser.Navigate("http://www.google.com");
    }

    void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        Html = ((WebBrowser)sender).DocumentText;
        this.ExitThread();
    }
}
3 голосов
/ 16 декабря 2011

WebBrowser не будет выполнять свою работу, пока текущий поток не завершит свою работу, если вы изменили его на что-то вроде этого:

        WebBrowser browser = new WebBrowser();
        browser.Navigate("http://www.google.com");
        browser.Navigated += (s, e) =>
            {
                var html = browser.DocumentText;
            };

Переменная будет установлена.

Но, как уже упоминали другие, завершенный документ является лучшим событием для прикрепления, так как в этот момент будет заполнен весь документ (соответствующее имя!)

        WebBrowser browser = new WebBrowser();
        browser.Navigate("http://www.google.com");

        browser.DocumentCompleted += (s, e) =>
            {
                var html = browser.DocumentText;
                html.ToString();
            };
2 голосов
/ 16 декабря 2011

Прикрепить к событию DocumentCompleted, код как ниже

browser.DocumentCompleted += (s, e) =>
{
    string html = browser.DocumentText;
};
1 голос
/ 16 декабря 2011

Если вам нужен DocumentText, вы должны обработать событие DocumentCompleted

  browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);

См. Событие ниже

void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {

        WebBrowser wb = (WebBrowser)sender;
        string text = wb.DocumentText;

}
0 голосов
/ 16 декабря 2011

Попробуйте что-то вроде этого

string url = string.Empty:
string html = "http://www.google.com/";
string url = html;
if (!url.StartsWith("http://") && !url.StartsWith("https://"))
{
   url = "http://" + url;
}
browser.Navigate(new Uri(url)); 

замените его в цикле while, где это необходимо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...