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

Selenium Chrome C# 抓取指定TD标签内容问题求助

解决Selenium C#只提取表格中姓名列的问题

我来帮你搞定这个问题!你现在的代码会遍历每一行里的所有<td>元素,所以姓名和手机号都会被添加到DataGridView里。要只提取姓名,我们只需要定位每行的**第一个<td>**就行——因为网页结构里每行的第一个td正好对应Contact Name列。

这里有两种简单的修改方案:

方案1:直接取每行td列表的第一个元素

FindElements(By.TagName("td"))返回的是按DOM顺序排列的元素列表,我们直接取索引为0的元素就是姓名:

var table = selenium1.driver().FindElement(By.TagName("tbody"));
var rows = table.FindElements(By.TagName("tr"));
foreach (var row in rows)
{
    var rowTds = row.FindElements(By.TagName("td"));
    // 确保存在td元素,避免索引越界
    if (rowTds.Count > 0)
    {
        var nameTd = rowTds[0];
        this.Invoke(new MethodInvoker(delegate () {
            dataGridView1.Rows.Add(nameTd.Text);
        }));
    }
}

方案2:用CSS选择器精准定位第一个子td

用td:first-child这个CSS选择器,可以直接定位到每行的第一个td元素,代码更简洁:

var table = selenium1.driver().FindElement(By.TagName("tbody"));
var rows = table.FindElements(By.TagName("tr"));
foreach (var row in rows)
{
    try
    {
        var nameTd = row.FindElement(By.CssSelector("td:first-child"));
        this.Invoke(new MethodInvoker(delegate () {
            dataGridView1.Rows.Add(nameTd.Text);
        }));
    }
    catch (NoSuchElementException)
    {
        // 处理没有找到元素的情况,比如跳过该行
        continue;
    }
}

这两种方法都能帮你只提取姓名列的内容,不会再把手机号加进去啦。建议加上异常处理或者判断,避免因为网页结构变化导致程序报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:21:53