5

我在 VS 2010 C# 中使用 webbrowser 控件开发 Windows 窗体应用程序。我的目标是在这个网站中自动导航,但是当我在某个点时,网站会弹出一个 javascript 警报,它将停止自动化,直到我按下 OK 按钮。我通过在弹出时模拟输入按键来解决了这个问题,但应用程序应该保持焦点以使其工作。我的问题是,有没有办法从网站上杀死这个自定义 javascript 警报(我无权访问侧面,从客户端杀死它)所以它不显示或任何其他方式来解决这个问题?显示的 javascript 警报(消息框)不是错误,是该网站的程序员出于某种原因放在那里的 javascript 警报。

4

1 回答 1

0

您可以尝试使用该Navigated事件并DocumentText在页面加载之前拦截以删除alert(...);引用。

NavigatedMSDN 上的页面:

当控件导航到新文档时,处理Navigated事件以接收通知。WebBrowserNavigated事件发生时,新文档已经开始加载,这意味着您可以通过 、 和 属性访问加载DocumentDocumentText内容DocumentStream

这是一些代码:

using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace Your.App
{
    public class PopupSuppress
    {
        WebBrowser _wb;
        public PopupSupress()
        {
            _wb = new WebBrowser();
            _wb.Navigated += new WebBrowserNavigatedEventHandler(_wb_Navigated);
        }

        void _wb_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            string alertRegexPattern = "alert\\([\\s\\S]*\\);";
            //make sure to only write to _wb.DocumentText if there is a change.
            //This will prompt a reloading of the page (and another 'Navigated' event) [see MSDN link]
            if(Regex.IsMatch(_wb.DocumentText, alertRegexPattern))
                _wb.DocumentText = Regex.Replace(_wb.DocumentText, alertRegexPattern, string.Empty);
        }
    }
}

来源/资源:

于 2012-09-18T19:00:46.443 回答