Yes, your code don't have STA thread. if you putting timer to get time for your html loading, that is not required when you use document completed event
Please try this
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace ConsoleApplication1
{
class Program
{
public static void Main(string[] args)
{
string url = "https://www.google.co.in/";
Thread thread = new Thread(delegate ()
{
using (WebBrowser browser = new WebBrowser())
{
browser.ScrollBarsEnabled = false;
browser.AllowNavigation = true;
browser.Visible = true;
browser.Navigate(url);
browser.Width = 1024;
browser.Height = 768;
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompleted);
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
Console.ReadKey();
}
public static void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser webBrControl = sender as WebBrowser;
if (webBrControl.ReadyState == WebBrowserReadyState.Complete)
{
HtmlElement element = webBrControl.Document.GetElementById("prm");
if (element != null)
{
Console.Write(element.OuterHtml + "\n\n\n");
Console.WriteLine("==============================================================================================================" + "\n\n\n");
}
}
}
}
}