You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C# WebBrowser的InvokeMember触发第三个同class按钮?

如何通过C# WebBrowser控件触发指定class的第三个按钮点击事件

嘿,我来帮你搞定这个问题!你已经熟悉用InvokeMember("Click")触发按钮点击,但现在三个按钮共享同一个class,只有onclick参数不同,要定位到第三个确实需要点小技巧。

两种可行的解决方案:

方案1:筛选目标按钮后模拟点击

先获取页面上所有匹配class的按钮,再定位到第三个(注意集合索引从0开始,所以第三个对应索引2),然后调用InvokeMember("Click")模拟点击:

// 确保代码在WebBrowser的DocumentCompleted事件中执行,保证页面已加载
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // 获取页面上所有button元素
    HtmlElementCollection allButtons = webBrowser1.Document.GetElementsByTagName("button");
    
    // 筛选出class匹配的按钮
    List<HtmlElement> targetButtons = new List<HtmlElement>();
    foreach (HtmlElement btn in allButtons)
    {
        // 注意className的匹配要准确,若页面中class末尾无空格,可去掉末尾空格或用Contains判断
        if (btn.GetAttribute("className") == "expedition_button awesome-button ")
        {
            targetButtons.Add(btn);
        }
    }
    
    // 检查是否存在至少3个目标按钮,再触发第三个的点击
    if (targetButtons.Count >= 3)
    {
        targetButtons[2].InvokeMember("Click");
    }
}

方案2:直接调用onclick对应的函数

既然你已经知道第三个按钮的onclick是attack(null, '1', 3, 0, ''),也可以直接调用这个JavaScript函数,跳过按钮元素的定位:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // 直接执行attack函数,参数对应第三个按钮的onclick参数
    webBrowser1.Document.InvokeScript("attack", new object[] { null, "1", 3, 0, "" });
}

小提示:

  • 一定要在DocumentCompleted事件里执行代码,否则页面还没加载完成,会找不到元素。
  • 如果页面中按钮的class末尾没有空格,记得调整判断条件,比如用btn.GetAttribute("className").Contains("expedition_button awesome-button")来避免空格匹配问题。

内容的提问来源于stack exchange,提问作者TheBlinderCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:33:44