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

使用C# WebBrowser为同class的两个输入框分别赋值的问题

解决WebBrowser控件中同class输入框分别赋值的问题

你的代码没法实现预期需求,核心问题很明确:两个if判断的是完全相同的class条件,而且第一个匹配到元素后就直接break跳出了循环,第二个输入框根本没机会被处理。

下面给你两种实用的解决方案:

方案1:先筛选目标元素再按索引赋值

这种方式用LINQ先把所有符合class的元素收集起来,再根据索引分别设置内容,代码清晰易读:

// 记得引用System.Linq命名空间,否则Cast和Where方法无法使用
using System.Linq;

// 务必在DocumentCompleted事件中执行代码(确保页面已完全加载)
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // 筛选出所有class为"rw-input rw-dropdown-list-input"的div元素
    var targetElements = webBrowser1.Document.GetElementsByTagName("div")
        .Cast<HtmlElement>()
        .Where(element => element.GetAttribute("className") == "rw-input rw-dropdown-list-input")
        .ToList();

    // 先检查元素数量,避免索引越界
    if (targetElements.Count >= 2)
    {
        targetElements[0].InnerText = "Lassa";
        targetElements[1].InnerText = "Ferrari";
    }
}

方案2:遍历计数,逐个赋值

如果不想用LINQ,也可以在遍历过程中计数,给第一个和第二个匹配到的元素分别赋值:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    int elementCount = 0;
    foreach (HtmlElement element in webBrowser1.Document.GetElementsByTagName("div"))
    {
        if (element.GetAttribute("className") == "rw-input rw-dropdown-list-input")
        {
            if (elementCount == 0)
            {
                element.InnerText = "Lassa";
            }
            else if (elementCount == 1)
            {
                element.InnerText = "Ferrari";
                // 找到第二个元素后直接跳出循环,节省不必要的遍历
                break;
            }
            elementCount++;
        }
    }
}

关键注意点

一定要把代码放在DocumentCompleted事件中执行,因为WebBrowser控件需要等页面完全加载完成后,才能正确获取到DOM元素,否则会出现找不到元素的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:38:17