Getting HTML body content in WinForms WebBrowser after body onload event executes

Here is how it can be done, I’ve put some comments inline:

private void Form1_Load(object sender, EventArgs e)
    bool complete = false;
    this.webBrowser1.DocumentCompleted += delegate
        if (complete)
        complete = true;
        // DocumentCompleted is fired before window.onload and body.onload
        this.webBrowser1.Document.Window.AttachEventHandler("onload", delegate
            // Defer this to make sure all possible onload event handlers got fired
                // try webBrowser1.Document.GetElementById("id") here
                MessageBox.Show("window.onload was fired, can access DOM!");
            }, null);


Updated, it’s 2019 and this answer is surprisingly still getting attention, so I’d like to note that my recommended way of doing with modern C# would be using async/await, like this.

Leave a Comment