我正在使用C#的webbrowswer功能。嘗試通過我的應用程序登錄網站。一切都很順利,除非輸入錯誤的ID或密碼時,會彈出一個消息框(在網頁上設置),直到點擊「確定」,彈出並阻止所有內容。 如何在C#中使用webbrowser時處理消息框?
所以問題是:是否有任何可能的方式來管理這個小窗口(如閱讀裏面的文本)?如果它真的太棒了! 但是,如果沒有辦法做到這一點,那麼無論如何,只是使這個消息框以編程方式消失?
我正在使用C#的webbrowswer功能。嘗試通過我的應用程序登錄網站。一切都很順利,除非輸入錯誤的ID或密碼時,會彈出一個消息框(在網頁上設置),直到點擊「確定」,彈出並阻止所有內容。 如何在C#中使用webbrowser時處理消息框?
所以問題是:是否有任何可能的方式來管理這個小窗口(如閱讀裏面的文本)?如果它真的太棒了! 但是,如果沒有辦法做到這一點,那麼無論如何,只是使這個消息框以編程方式消失?
您可以通過從user32.dll中導入一些窗口功能和它的類名和窗口名得到消息框對話框的句柄「管理」消息對話框。例如,單擊其確定按鈕:
public class Foo
{
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
private void ClickOKButton()
{
IntPtr hwnd = FindWindow("#32770", "Message from webpage");
hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Button", "OK");
uint message = 0xf5;
SendMessage(hwnd, message, IntPtr.Zero, IntPtr.Zero);
}
}
哇!好人!它工作得很好!但是閱讀這些內容呢? (如閱讀「登錄不正確」或「密碼不正確」? – Emil 2012-03-19 13:36:13
@Emil,請參閱[WM_GETTEXT](http://msdn.microsoft.com/en-us/library/windows/desktop/ms632627(v = vs 0.85)的.aspx) – 2012-03-19 16:05:52
從賽瑞斯anwser複製粘貼:https://stackoverflow.com/a/251524/954225
private void InjectAlertBlocker() {
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
string alertBlocker = "window.alert = function() { }";
element.text = alertBlocker;
head.AppendChild(scriptEl);
}
這不起作用 – 2014-01-24 09:23:19
它的作品! https://pt.stackoverflow.com/a/246522/69359 – 2017-10-16 16:38:44
是否有一個特定的原因,你不是簡單地直接發佈表單直接發送到網絡服務器而不使用webbrowser控件? – 2012-03-19 12:54:18
是的,丹尼爾,有。 – Emil 2012-03-19 12:56:01
aha ...小心分享嗎? – 2012-03-19 12:59:01