我在 VS 2010 C# 中使用 webbrowser 控件开发 Windows 窗体应用程序。我的目标是在这个网站中自动导航,但是当我在某个点时,网站会弹出一个 javascript 警报,它将停止自动化,直到我按下 OK 按钮。我通过在弹出时模拟输入按键来解决了这个问题,但应用程序应该保持焦点以使其工作。我的问题是,有没有办法从网站上杀死这个自定义 javascript 警报(我无权访问侧面,从客户端杀死它)所以它不显示或任何其他方式来解决这个问题?显示的 javascript 警报(消息框)不是错误,是该网站的程序员出于某种原因放在那里的 javascript 警报。
问问题
2242 次
1 回答
0
您可以尝试使用该Navigated
事件并DocumentText
在页面加载之前拦截以删除alert(...);
引用。
从Navigated
MSDN 上的页面:
当控件导航到新文档时,处理
Navigated
事件以接收通知。WebBrowser
当Navigated
事件发生时,新文档已经开始加载,这意味着您可以通过 、 和 属性访问加载Document
的DocumentText
内容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 回答