我有一個用WinForms C#編寫的Web瀏覽器自動化項目。 導航過程中,瀏覽器執行「你確定要離開這個頁面嗎?」彈出。 我們需要這個彈出窗口,所以我不能從網站代碼中刪除它,這意味着我必須在我的自動化應用程序中覆蓋它。在.NET瀏覽器控件中禁止彈出「你確定要離開這個頁面」
有沒有人有一個想法如何做到這一點?
我有一個用WinForms C#編寫的Web瀏覽器自動化項目。 導航過程中,瀏覽器執行「你確定要離開這個頁面嗎?」彈出。 我們需要這個彈出窗口,所以我不能從網站代碼中刪除它,這意味着我必須在我的自動化應用程序中覆蓋它。在.NET瀏覽器控件中禁止彈出「你確定要離開這個頁面」
有沒有人有一個想法如何做到這一點?
你能製作任何對網站代碼的更改嗎?
如果是這樣,你可能看通過ObjectForScripting
露出一個對象,然後將其網站代碼檢查window.external
(也可能是您的詢問對象),它決定以顯示彈出式前 - 因此,如果不能找到你的對象,它假定它正在正常使用並顯示它。
和這裏是光滑溶液..
添加引用MSHTML並添加使用MSHTML;
Browser.Navigated +=
new WebBrowserNavigatedEventHandler(
(object sender, WebBrowserNavigatedEventArgs args) => {
Action<HtmlDocument> blockAlerts = (HtmlDocument d) => {
HtmlElement h = d.GetElementsByTagName("head")[0];
HtmlElement s = d.CreateElement("script");
IHTMLScriptElement e = (IHTMLScriptElement)s.DomElement;
e.text = "window.alert=function(){};";
h.AppendChild(s);
};
WebBrowser b = sender as WebBrowser;
blockAlerts(b.Document);
for (int i = 0; i < b.Document.Window.Frames.Count; i++)
try { blockAlerts(b.Document.Window.Frames[i].Document); }
catch (Exception) { };
}
);
我已經提供了一個答案這在我對某個問題的迴應之一(我是編寫「WebBrowser控制限制」的人)。如果我可能會問,你的應用的目的是什麼? – 2013-07-21 06:58:08
另外,你是否發現我的答案與window.alert = function(){};在其中還是有其他人寫了這個呢? – 2013-07-21 06:59:30
不需要再添加。嘗試一下。像魅力一樣工作。^_^
private void webNavigated(object sender, WebBrowserNavigatedEventArgs e)
{
HtmlDocument doc = webBrowser.Document;
HtmlElement head = doc.GetElementsByTagName("head")[0];
HtmlElement s = doc.CreateElement("script");
s.SetAttribute("text", "function cancelOut() { window.onbeforeunload = null; window.alert = function() { }; window.confirm=function() { }}");
head.AppendChild(s);
webBrowser.Document.InvokeScript("cancelOut");
}
好吧,我解決它由具有後臺線程沉睡AA秒,然後做一個sendkeys.sendwait(「{ENTER}」) 不完全是光滑的,但它的工作原理.. – ploink 2012-04-27 10:34:59