2013-05-30 129 views
4

根据要求,我需要在网页中取消内容。为了实现这个,我创建了一个Windows应用程序,并在主窗体中添加了一个Web浏览器控件。这样我可以查看报废过程。我可以登录到网页并导航到所需的网页。此外,我可以双击编程的网格单元格。但目前的问题是,当以编程方式双击网格单元并且如果期望的数据不可用时我收到一条警告消息enter image description here在报废时防止警报消息

因此,自然的拆解过程正在中断,而我们需要手动点击“确定”按钮继续刮过程。 如何避免报废时报警消息的到达? 任何帮助将是可观的。 谢谢

+0

可能重复:http://stackoverflow.com/questions/77659/blocking-dialogs-in-net-webbrowser-control – Giedrius

+0

我已经使用警告overloading.But不幸的是它不工作 – Ranish

+0

所以可能是它来自某种插件?或者它是JavaScript错误,在这种情况下,你可以用'webBrowser.ScriptErrorsSuppressed = true'来禁用它们。另一个问题是,你真的需要网络浏览器控制报废,因为这种方法比手动请求更慢吗? – Giedrius

回答

5

要以编程方式点击警告框,我们可以使用Windows API FindWindow,FindWindowEx和SendMessage,这个想法是当一个警告框出现时,主机WebBrowser控件将失去焦点的形式,此时,我们将能够使用FindWindow检索警报框的窗口句柄,最后我们可以发送一个单击消息到“确定”按钮来点击它。

[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 Form1_Deactivate(object sender, EventArgs e) 
    { 
     IntPtr hwnd = FindWindow(null, "Message from webpage"); 
     hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Button", "OK"); 
     uint message = 0xf5; 
     SendMessage(hwnd, message, IntPtr.Zero, IntPtr.Zero); 
    }