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

如何在Flutter中解析HTML指定div的内容,解决RangeError报错

错误原因

你触发范围错误的核心是:代码遍历页面所有<div>元素时,对每一个<div>都直接尝试取出其下class为rn_nummer的第一个元素,但大部分<div>下没有该类元素,返回的空集合访问索引0就会抛出该异常。

正确实现方案

推荐直接用CSS选择器精准定位目标元素,无需遍历所有<div>,效率更高也不会触发空访问错误,示例代码如下:

import 'package:html/parser.dart' as parser;
import 'package:html/dom.dart';

// 假设你已经拿到解析后的document对象
List<String> numeros = [];
// 直接匹配所有class为rn_nummer的div元素
final targetDivs = document.querySelectorAll('div.rn_nummer');
// 提取所有目标元素的纯文本内容
numeros = targetDivs.map((element) => element.text.trim()).toList();

如果要修复你原来的写法,只需要增加非空判断即可:

List<String> numeros = [];
final allDivs = document.getElementsByTagName("div");
for (var div in allDivs) {
  final rnElements = div.getElementsByClassName("rn_nummer");
  // 仅当存在符合条件的元素时才取值
  if (rnElements.isNotEmpty) {
    numeros.add(rnElements.first.innerHtml.trim());
  }
}
补充说明
  • 提取纯文本优先使用element.text而非innerHtml,可以避免拿到元素内嵌的HTML标签内容,更符合你获取纯数字的需求
  • 搭配.trim()可以去除文本前后多余的换行、空格,结果更干净

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:39:03