刮擦时防止警报消息

Ran*_*ish 4 c# winforms web-scraping

根据要求,我需要抓取网页中的内容.为了实现这一点,我创建了一个Windows应用程序,并在主窗体中添加了一个Web浏览器控件.这样我就可以查看报废过程了.我可以登录网页并导航到所需的网页.此外,我能够以编程方式双击网格单元格.但是当前的问题是,当我以编程方式双击网格单元格并且所需数据不可用时,我收到一条警告消息在此输入图像描述

因此,自然刮取过程中断并手动我们需要单击"确定"按钮继续刮取过程.如何在抓取时避免警报消息的到来?

Pal*_*ria 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);
    }
Run Code Online (Sandbox Code Playgroud)