Search code examples
c#winformsdotnetbrowser

DotNetBrowser FinishLoadingFrameEvent multiple use


im trying to load multiple pages using DotNetBrowser , and i need to know each time when the new url is loaded,

 myBro.FinishLoadingFrameEvent += delegate (object send, FinishLoadingEventArgs es)
            {        
     if (es.IsMainFrame && es.ValidatedURL.Contains("login"))
                {
                    DOMDocument document = myBro.GetDocument();
                    DOMElement user = document.GetElementById("LoginForm_login");
                    user.SetAttribute("value", "email");
                    DOMElement pass = document.GetElementById("LoginForm_password");
                    pass.SetAttribute("value", "pass");
                    DOMElement loginbtn = document.GetElementByTagName("button");
                    loginbtn.Click();

   // can't add nothing more here //

};

but this code does inform me only if the first page is loaded


Solution

  • The FinishLoadingFrameEvent is fired for each frame loaded on the web page, even after the page is reloaded. You can use it multiple times to be notified when a browser has loaded the web page completely after the LoadURL method is called.

    Here is a sample code based on the documentation article https://dotnetbrowser.support.teamdev.com/support/solutions/articles/9000110055-loading-url-synchronously :

    ManualResetEvent waitEvent = new ManualResetEvent(false);
    browser.FinishLoadingFrameEvent += delegate(object sender, FinishLoadingEventArgs e)
    {
        // Wait until main document of the web page is loaded completely.
        if (e.IsMainFrame)
        {
            waitEvent.Set();
        }
    };
    
    //Load URL
    browser.LoadURL("http://www.google.com");
    waitEvent.WaitOne();
    //The page http://www.google.com is now loaded completely
    
    //Then, reset the event and load the next URL
    waitEvent.Reset();
    browser.LoadURL("http://www.microsoft.com");
    waitEvent.WaitOne();
    //The page http://www.microsoft.com is now loaded completely