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?
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.
// 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();
}
}
}
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);
}
}
}