如何用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
相关产品推荐
相关产品推荐

