awesomium control isn't visiting google

awesomium, c#, document-ready

Solution

If you don't need to display the page being scraped to the user, I would perform web-scraping using a non-Windowed WebView that can execute on a background thread.

Example of scraping in a non-windowed console app

// Credit: Awesomium v1.7.2 C# Basic Sample
//         by Perikles C. Stephanidis
using System;
using Awesomium.Core;
using System.Threading;
using System.Diagnostics;
using System.Reflection;

namespace BasicSample
{
    class Program
    {
        static void Main( string[] args )
        {
            WebCore.Initialize(WebConfig.Default);

            Uri url = new Uri("http://www.google.com");

            using ( WebSession session = WebCore.CreateWebSession(WebPreferences.Default) )
            {
                // WebView implements IDisposable. Here we demonstrate
                // wrapping it in a using statement.
                using ( WebView view = WebCore.CreateWebView( 1100, 600, session ) )
                {
                    bool finishedLoading = false;
                    bool finishedResizing = false;

                    Console.WriteLine( String.Format( "Loading: {0} ...", url ) );

                    // Load a URL.
                    view.Source = url;

                    // This event is fired when a frame in the
                    // page finished loading.
                    view.LoadingFrameComplete += ( s, e ) =>
                    {
                        Console.WriteLine( String.Format( "Frame Loaded: {0}", e.FrameId ) );

                        // The main frame usually finishes loading last for a given page load.
                        if ( e.IsMainFrame )
                            finishedLoading = true;
                    };

                    while ( !finishedLoading )
                    {
                        Thread.Sleep( 100 );
                        // A Console application does not have a synchronization
                        // context, thus auto-update won't be enabled on WebCore.
                        // We need to manually call Update here.
                        WebCore.Update();
                    }

                    // Print some more information.
                    Console.WriteLine( String.Format( "Page Title: {0}", view.Title ) );
                    Console.WriteLine( String.Format( "Loaded URL: {0}", view.Source ) );
                } // Destroy and dispose the view.
            } // Release and dispose the session.            

            // Shut down Awesomium before exiting.
            WebCore.Shutdown();

            Console.WriteLine("Press any key to exit...");
            Console.Read();
        }
    }
}

Example of a working scraper using a windowed control

using System;
using System.Windows.Forms;

namespace App
{
    public partial class DemoForm : Form
    {
        private Awesomium.Windows.Forms.WebControl web;

        public DemoForm()
        {
            InitializeComponent();
            doSomeScrap();
        }

        public void doSomeScrap()
        {
            MessageBox.Show("in the scrapper...");
            web.DocumentReady += webcontrolEventListener;
            web.Source = new Uri("http://www.google.com");
            web.Update();
        }

        private void webcontrolEventListener(object sender, EventArgs e)
        {
            MessageBox.Show("in the listener!");
        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            this.web = new Awesomium.Windows.Forms.WebControl();
            this.web.Dock = System.Windows.Forms.DockStyle.Fill;
            this.Controls.Add(this.web);

            this.ClientSize = new System.Drawing.Size(800, 600);
            this.Name = "DemoForm";
            this.Text = "DemoForm";

            this.ResumeLayout(false);
        }
    }
}

Problem

Hy all, I'm making an Winform project with an awesomium webcontrol inside an class. I'm navigating that controll to `http://www.google.com/` ( just for the test ) and added an `DocumentReady` even listner to it. But it won't fire the listener... ( `i don't get the "in the listener!" message`) Here's the code i've got ( i call the `doSomeScrap` in the main form (`Form1`): ``` class scrapper { WebControl web = new WebControl(); public void doSomeScrap() { MessageBox.Show("in the scrapper..."); web.DocumentReady += webcontrolEventListener; web.Source = "http://www.google.com".ToUri(); web.Update(); } private void webcontrolEventListener(object sender, EventArgs e) { MessageBox.Show("in the listener!"); } } ``` Also, I've heard of `LoadingFrameCompleted`, but when i use that, i get the following error: ``` 'Awesomium.Windows.Forms.WebControl' does not contain a definition for 'LoadingFrameCompleted' and no extension method 'LoadingFrameCompleted' accepting a first argument of type 'Awesomium.Windows.Forms.WebControl' could be found (are you missing a using directive or an assembly reference?) ``` So what did i do wrong? Or what did i forget to make this work? Extra Info: I've got another webcontrol in the form gui, and when i use this code on it ( without the `update()` call, the controll is navigating... So my guys is that it isn't navigating because it isn't in the GUI. But how can i make it navigate then?

Original source