我有一個使用watin的c#windows窗體項目。watin attachto嵌入式瀏覽器
我很想附加到窗體上的網頁瀏覽器控件,這可能嗎?有沒有關於如何附加到嵌入式Web瀏覽器控件的示例代碼。
//Looks like this only works for actual IExplorer instances.
window = WatiN.Core.Browser.AttachTo<WatiN.Core.IE>(WatiN.Core.Find.ByTitle("Google"));
我有一個使用watin的c#windows窗體項目。watin attachto嵌入式瀏覽器
我很想附加到窗體上的網頁瀏覽器控件,這可能嗎?有沒有關於如何附加到嵌入式Web瀏覽器控件的示例代碼。
//Looks like this only works for actual IExplorer instances.
window = WatiN.Core.Browser.AttachTo<WatiN.Core.IE>(WatiN.Core.Find.ByTitle("Google"));
這是我用來連接到嵌入式Web瀏覽器控件的代碼:
WatiN.Core.IE窗口= NULL;
WatiN.Core.Settings.AutoStartDialogWatcher = false;
window = new WatiN.Core.IE(webBrowser1.ActiveXInstance);
也許我失去了一些東西,但你能不能使用WebBrowser
控制,並將其連接到WinForms應用程序?
我有我的窗體上的WebBrowser控件。我想使用Watin附加到瀏覽器控件的實例。 – MHop 2010-03-10 19:15:59
是的,你可以使用WebBrowser控件,但有一些技巧。
關鍵是,因爲您的應用程序提供了對話框(而不是IE),所以您必須將Settings對象屬性AutoStartDialogWatcher設置爲false。否則,您將無法連接,因爲對話框監視器窗口句柄無效。
我會建議使用類似於: IE newbrowser = new WatiN.Core.IE(embeddedbrowser.IWebBrowser2);
...當然,IWebBrowser2屬性名稱將根據您使用的庫而變化。
對我來說,它給了錯誤。
WatiN.Core.Exceptions.TimeoutException了未處理 消息=「超時而Internet Explorer的忙」 源=「WatiN.Core」
它有可能使嵌入式瀏覽器控件與華廷的對話框 - 工作處理機制,如果你能得到WebBrowser控件的窗口句柄,如果你正在寫一個包含它(1)
你需要的原因,這個窗口句柄是形式的代碼應該是完全有可能完全是因爲WatiN無法通過IWebBrowser2.HWND屬性檢索它 - 這是我這是預料之中的。 (2)
作爲一個側面說明,即使在處理微軟的IE時,我也經歷了IWebBrowser2.HWND屬性的問題和不穩定的行爲 - 所以我們需要遵循下面概述的方法來解決此類HWND問題。
一旦您掌握了webbrowser控件的窗口句柄,您可以簡單地創建一個代理類來環繞嵌入式web瀏覽器的IWebBrowser2接口(HWND除外)以解決問題。把它放在一起,你現在可以寫:
Settings.AutoStartDialogWatcher = true;
new IE(new ProxyForIWebBrowser2InterfaceToWorkaroundHWNDBugs((IWebBrowser2) webBrowser1.ActiveXInstance, webBrowser1.Handle), true);
希望這會有所幫助。哦,這裏的代理類,你將需要:
using System;
using SHDocVw;
namespace WatiN.Core.Native.InternetExplorer
{
public class ProxyForIWebBrowser2InterfaceToWorkaroundHWNDBugs : IWebBrowser2
{
#region Implementation of IWebBrowser
private readonly int _ExplicitHwndForIWebBrowser2;
private readonly IWebBrowser2 _EmbeddedWebBrowserAsIWebBrowser2;
public ProxyForIWebBrowser2InterfaceToWorkaroundHWNDBugs(IWebBrowser2 embeddedWebBrowserAsIWebBrowser2, IntPtr explicitHwnd)
{
_EmbeddedWebBrowserAsIWebBrowser2 = embeddedWebBrowserAsIWebBrowser2;
_ExplicitHwndForIWebBrowser2 = (int)explicitHwnd;
}
void IWebBrowser.GoBack()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoBack();
}
void IWebBrowser2.GoForward()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoForward();
}
void IWebBrowser2.GoHome()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoHome();
}
void IWebBrowser2.GoSearch()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoSearch();
}
void IWebBrowser2.Navigate(string URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
{
_EmbeddedWebBrowserAsIWebBrowser2.Navigate(URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
}
void IWebBrowser2.Refresh()
{
_EmbeddedWebBrowserAsIWebBrowser2.Refresh();
}
void IWebBrowser2.Refresh2(ref object Level)
{
_EmbeddedWebBrowserAsIWebBrowser2.Refresh2(ref Level);
}
void IWebBrowser2.Stop()
{
_EmbeddedWebBrowserAsIWebBrowser2.Stop();
}
object IWebBrowser2.Application
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Application; }
}
object IWebBrowser2.Parent
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Parent; }
}
object IWebBrowser2.Container
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Container; }
}
object IWebBrowser2.Document
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Document; }
}
bool IWebBrowser2.TopLevelContainer
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.TopLevelContainer; }
}
string IWebBrowser2.Type
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Type; }
}
int IWebBrowser2.Left
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Left; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Left = value; }
}
int IWebBrowser2.Top
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Top; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Top = value; }
}
int IWebBrowser2.Width
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Width; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Width = value; }
}
int IWebBrowser2.Height
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Height; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Height = value; }
}
void IWebBrowser2.Quit()
{
_EmbeddedWebBrowserAsIWebBrowser2.Quit();
}
void IWebBrowser2.ClientToWindow(ref int pcx, ref int pcy)
{
_EmbeddedWebBrowserAsIWebBrowser2.ClientToWindow(ref pcx, ref pcy);
}
void IWebBrowser2.PutProperty(string Property, object vtValue)
{
_EmbeddedWebBrowserAsIWebBrowser2.PutProperty(Property, vtValue);
}
object IWebBrowser2.GetProperty(string Property)
{
return _EmbeddedWebBrowserAsIWebBrowser2.GetProperty(Property);
}
public void Navigate2(ref object URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
{
_EmbeddedWebBrowserAsIWebBrowser2.Navigate2(ref URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
}
public OLECMDF QueryStatusWB(OLECMDID cmdID)
{
return _EmbeddedWebBrowserAsIWebBrowser2.QueryStatusWB(cmdID);
}
public void ExecWB(OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, ref object pvaIn, ref object pvaOut)
{
_EmbeddedWebBrowserAsIWebBrowser2.ExecWB(cmdID, cmdexecopt, ref pvaIn, ref pvaOut);
}
public void ShowBrowserBar(ref object pvaClsid, ref object pvarShow, ref object pvarSize)
{
_EmbeddedWebBrowserAsIWebBrowser2.ShowBrowserBar(ref pvaClsid, ref pvarShow, ref pvarSize);
}
void IWebBrowser2.GoBack()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoBack();
}
void IWebBrowserApp.GoForward()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoForward();
}
void IWebBrowserApp.GoHome()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoHome();
}
void IWebBrowserApp.GoSearch()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoSearch();
}
void IWebBrowserApp.Navigate(string URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
{
_EmbeddedWebBrowserAsIWebBrowser2.Navigate(URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
}
void IWebBrowserApp.Refresh()
{
_EmbeddedWebBrowserAsIWebBrowser2.Refresh();
}
void IWebBrowserApp.Refresh2(ref object Level)
{
_EmbeddedWebBrowserAsIWebBrowser2.Refresh2(ref Level);
}
void IWebBrowserApp.Stop()
{
_EmbeddedWebBrowserAsIWebBrowser2.Stop();
}
object IWebBrowserApp.Application
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Application; }
}
object IWebBrowserApp.Parent
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Parent; }
}
object IWebBrowserApp.Container
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Container; }
}
object IWebBrowserApp.Document
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Document; }
}
bool IWebBrowserApp.TopLevelContainer
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.TopLevelContainer; }
}
string IWebBrowserApp.Type
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Type; }
}
int IWebBrowserApp.Left
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Left; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Left = value; }
}
int IWebBrowserApp.Top
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Top; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Top = value; }
}
int IWebBrowserApp.Width
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Width; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Width = value; }
}
int IWebBrowserApp.Height
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Height; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Height = value; }
}
void IWebBrowserApp.Quit()
{
_EmbeddedWebBrowserAsIWebBrowser2.Quit();
}
void IWebBrowserApp.ClientToWindow(ref int pcx, ref int pcy)
{
_EmbeddedWebBrowserAsIWebBrowser2.ClientToWindow(ref pcx, ref pcy);
}
void IWebBrowserApp.PutProperty(string Property, object vtValue)
{
_EmbeddedWebBrowserAsIWebBrowser2.PutProperty(Property, vtValue);
}
object IWebBrowserApp.GetProperty(string Property)
{
return _EmbeddedWebBrowserAsIWebBrowser2.GetProperty(Property);
}
void IWebBrowserApp.GoBack()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoBack();
}
void IWebBrowser.GoForward()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoForward();
}
void IWebBrowser.GoHome()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoHome();
}
void IWebBrowser.GoSearch()
{
_EmbeddedWebBrowserAsIWebBrowser2.GoSearch();
}
void IWebBrowser.Navigate(string URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers)
{
_EmbeddedWebBrowserAsIWebBrowser2.Navigate(URL, ref Flags, ref TargetFrameName, ref PostData, ref Headers);
}
void IWebBrowser.Refresh()
{
_EmbeddedWebBrowserAsIWebBrowser2.Refresh();
}
void IWebBrowser.Refresh2(ref object Level)
{
_EmbeddedWebBrowserAsIWebBrowser2.Refresh2(ref Level);
}
void IWebBrowser.Stop()
{
_EmbeddedWebBrowserAsIWebBrowser2.Stop();
}
object IWebBrowser.Application
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Application; }
}
object IWebBrowser.Parent
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Parent; }
}
object IWebBrowser.Container
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Container; }
}
object IWebBrowser.Document
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Document; }
}
bool IWebBrowser.TopLevelContainer
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.TopLevelContainer; }
}
string IWebBrowser.Type
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Type; }
}
int IWebBrowser.Left
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Left; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Left = value; }
}
int IWebBrowser.Top
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Top; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Top = value; }
}
int IWebBrowser.Width
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Width; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Width = value; }
}
int IWebBrowser.Height
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Height; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Height = value; }
}
string IWebBrowser.LocationName
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationName; }
}
string IWebBrowser2.LocationURL
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationURL; }
}
bool IWebBrowser2.Busy
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Busy; }
}
string IWebBrowser2.Name
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Name; }
}
int IWebBrowser2.HWND
{
get { return _ExplicitHwndForIWebBrowser2; }
}
string IWebBrowser2.FullName
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.FullName; }
}
string IWebBrowser2.Path
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Path; }
}
bool IWebBrowser2.Visible
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Visible; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Visible = value; }
}
bool IWebBrowser2.StatusBar
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusBar; }
set { _EmbeddedWebBrowserAsIWebBrowser2.StatusBar = value; }
}
string IWebBrowser2.StatusText
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusText; }
set { _EmbeddedWebBrowserAsIWebBrowser2.StatusText = value; }
}
int IWebBrowser2.ToolBar
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.ToolBar; }
set { _EmbeddedWebBrowserAsIWebBrowser2.ToolBar = value; }
}
bool IWebBrowser2.MenuBar
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.MenuBar; }
set { _EmbeddedWebBrowserAsIWebBrowser2.MenuBar = value; }
}
bool IWebBrowser2.FullScreen
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.FullScreen; }
set { _EmbeddedWebBrowserAsIWebBrowser2.FullScreen = value; }
}
public tagREADYSTATE ReadyState
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.ReadyState; }
}
public bool Offline
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Offline; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Offline = value; }
}
public bool Silent
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Silent; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Silent = value; }
}
public bool RegisterAsBrowser
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsBrowser; }
set { _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsBrowser = value; }
}
public bool RegisterAsDropTarget
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsDropTarget; }
set { _EmbeddedWebBrowserAsIWebBrowser2.RegisterAsDropTarget = value; }
}
public bool TheaterMode
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.TheaterMode; }
set { _EmbeddedWebBrowserAsIWebBrowser2.TheaterMode = value; }
}
public bool AddressBar
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.AddressBar; }
set { _EmbeddedWebBrowserAsIWebBrowser2.AddressBar = value; }
}
public bool Resizable
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Resizable; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Resizable = value; }
}
string IWebBrowser2.LocationName
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationName; }
}
string IWebBrowserApp.LocationURL
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationURL; }
}
bool IWebBrowserApp.Busy
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Busy; }
}
string IWebBrowserApp.Name
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Name; }
}
int IWebBrowserApp.HWND
{
get { return _ExplicitHwndForIWebBrowser2; }
}
string IWebBrowserApp.FullName
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.FullName; }
}
string IWebBrowserApp.Path
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Path; }
}
bool IWebBrowserApp.Visible
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Visible; }
set { _EmbeddedWebBrowserAsIWebBrowser2.Visible = value; }
}
bool IWebBrowserApp.StatusBar
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusBar; }
set { _EmbeddedWebBrowserAsIWebBrowser2.StatusBar = value; }
}
string IWebBrowserApp.StatusText
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.StatusText; }
set { _EmbeddedWebBrowserAsIWebBrowser2.StatusText = value; }
}
int IWebBrowserApp.ToolBar
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.ToolBar; }
set { _EmbeddedWebBrowserAsIWebBrowser2.ToolBar = value; }
}
bool IWebBrowserApp.MenuBar
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.MenuBar; }
set { _EmbeddedWebBrowserAsIWebBrowser2.MenuBar = value; }
}
bool IWebBrowserApp.FullScreen
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.FullScreen; }
set { _EmbeddedWebBrowserAsIWebBrowser2.FullScreen = value; }
}
string IWebBrowserApp.LocationName
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationName; }
}
string IWebBrowser.LocationURL
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.LocationURL; }
}
bool IWebBrowser.Busy
{
get { return _EmbeddedWebBrowserAsIWebBrowser2.Busy; }
}
#endregion
}
}
1:即使你沒有,你有這樣的形式的源代碼訪問,因爲,比如說,WebBrowser控件是一個第三方應用程序,您無法訪問,您可以編寫一個小型實用程序功能來掃描所有窗口,直到您偶然發現包含您所瀏覽的網頁瀏覽器控件的第三方應用程序。您可以在ShellWindows2.CollectInternetExplorerInstances()中查看WatiN的源代碼,以瞭解如何實現這樣的掃描功能。
沒有頁面更新,我得到「Internet Explorer狀態未完成時超時」錯誤。任何人都會遇到這個問題 – atwellpub 2011-12-06 23:33:41
我能夠通過在線程模式下執行新的IE創建來解決這個問題。誰知道去圖。 – atwellpub 2011-12-07 02:20:14
@atwellpub你是怎麼做到的?我有同樣的問題。我在Form1_Load上有[STAThread]。這是你指的是什麼? – Jason 2012-12-17 22:32:15