WebBrowser – DocumentText vacío

Estoy tratando de usar la clase WebBrowser , pero por supuesto no funciona.

Mi código:

 WebBrowser browser = new WebBrowser(); browser.Navigate("http://www.google.com"); while(browser.DocumentText == "") { continue; } string html = browser.DocumentText; 

browser.DocumentText es siempre "" . ¿Por qué?

El WebBrowser no va a hacer su trabajo hasta que el hilo actual termine, si lo cambiaste para ser algo como esto:

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

Se establecerá la variable.

Pero, como han mencionado otros, el documento completado es un evento mejor para adjuntar, ya que en ese momento, se completará todo el documento (¡nombre apropiado!)

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

Debe usar el evento DocumentCompleted y, si no tiene la aplicación WebForms, también es posible que se necesite 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(); } } 

Adjuntar al evento DocumentCompleted , el código es el siguiente

 browser.DocumentCompleted += (s, e) => { string html = browser.DocumentText; }; 

Si necesita el DocumentText debe manejar el evento DocumentCompleted

  browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted); 

Ver evento abajo

 void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { WebBrowser wb = (WebBrowser)sender; string text = wb.DocumentText; } 

Prueba algo como esto

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

Reemplázalo dentro de tu bucle While cuando sea necesario