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

PuppeteerSharp爬取分页td元素innerText为空问题求助

PuppeteerSharp爬取分页表格td文本为空的解决方案

问题背景

使用PuppeteerSharp爬取分页表格时,能选中目标td元素,但仅能获取到Prev和Next的innerText,其余分页数字对应的td返回空字符串,转换为int时抛出System.FormatException。

可能原因及解决方法

1. 改用浏览器上下文直接执行JS获取文本

ElementHandle的GetPropertyAsync("innerText")可能因元素动态渲染延迟或快照特性导致无法获取最新内容,直接通过EvaluateAsync在浏览器端执行JS获取更可靠:

// 直接在浏览器上下文获取倒数第二个td的文本并转换为int
var numPages = await page.EvaluateAsync<int>(@"
    const paginationTds = document.querySelectorAll('#characters > table > tbody > tr > td:nth-child(2) > table > tbody > tr > td');
    // 取倒数第二个元素,去除空白后转整数
    return parseInt(paginationTds[paginationTds.length - 2].textContent.trim(), 10);
");

2. 等待元素完全可见后再获取内容

分页元素可能是异步加载的,需确保元素完全渲染可见后再操作:

// 等待倒数第二个分页td可见
await page.WaitForSelectorAsync(
    "#characters > table > tbody > tr > td:nth-child(2) > table > tbody > tr > td:nth-last-child(2)",
    new WaitForSelectorOptions { Visible = true, Timeout = 5000 }
);

// 再执行获取操作
var characterPageHandle = await page.QuerySelectorAllAsync("#characters > table > tbody > tr > td:nth-child(2) > table > tbody > tr > td");
var numPagesText = await characterPageHandle[^2].EvaluateAsync<string>("el => el.textContent.trim()");
var numPages = int.Parse(numPagesText);

3. 替换innerText为textContent

部分动态渲染场景下,innerText受CSS样式影响可能返回空,textContent会返回元素的原始文本内容:

修改你的GetInnerTextAsync<T>扩展方法,将GetPropertyAsync("innerText")替换为GetPropertyAsync("textContent"):

public static async Task<T> GetInnerTextAsync<T>(this IElementHandle element)
{
    var textProperty = await element.GetPropertyAsync("textContent");
    var text = await textProperty.JsonValueAsync<string>();
    return (T)Convert.ChangeType(text?.Trim(), typeof(T));
}

4. 检查选择器中的tbody是否多余

部分网页的表格HTML中并没有显式的tbody标签,浏览器会自动生成,导致选择器中的tbody匹配到的是浏览器生成的空元素。尝试移除选择器中的tbody:

将原选择器:

#characters > table > tbody > tr > td:nth-child(2) > table > tbody > tr > td

改为:

#characters > table > tr > td:nth-child(2) > table > tr > td

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:20:38