在WebBrowser控件中模拟鼠标单击

4
我正在构建一个屏幕抓取工具,以自动填充传统网络表单。在研究了Selenium和其他自动化框架之后,我决定简单地使用C# WebBrowser控件,目前使用起来很容易且效果良好。然而,其中一个网页表单使用了一个Java驱动的导航窗格,我无法像处理HTML元素一样对其进行控制。因此,我的计划是找到各种导航元素的屏幕坐标并模拟鼠标点击。
我找到了几篇相关文章,并尝试了下面这段代码。然而它不起作用,我也搞不清为什么。我尝试在ClickOn()调用中传递WebBrowser控件和其父窗体的句柄,但都没有起作用。我用Spy++查看了它,似乎没有触发任何消息。有人知道原因吗?
此外,我应该补充说明,目前还没有涉及到Java。我只是尝试单击HTML按钮来验证ClickOn方法。
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(onDocLoaded);
    }

    private void onLoad(object sender, EventArgs e)
    {
        browser.Navigate(@"http://www.dummysite.com/");
    }

    void onDocLoaded(object sender, WebBrowserDocumentCompletedEventArgs e )
    {
        ClickOn(browser.Handle, 899, 463);
    }

    [DllImport("user32.dll", EntryPoint = "PostMessage",  CharSet = CharSet.Auto)]
    static extern bool PostMessage1(IntPtr hWnd, uint Msg,
      int wParam, int lParam);

    private void ClickOn(IntPtr hControl, int x, int y)
    {
        uint WM_LBUTTONDOWN = 0x0201;
        uint WM_LBUTTONUP = 0x0202;
        PostMessage1(hControl, WM_LBUTTONDOWN, x, y);
        PostMessage1(hControl, WM_LBUTTONUP, x, y);
    }
}
1个回答

0
尝试在 window.load 事件之后从 JavaScript 调用 ClickOn。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接