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

PHP Simple HTML DOM提取__NEXT_DATA__脚本报id属性未定义错误

问题背景

需要提取指定产品页面中ID为__NEXT_DATA__的script标签内容,初始实现代码如下:

foreach($html_base->getElementsByTagName('script') as $element) {
    if (isset($element->id)){
        $id = $element->id;
        if ($id == "__NEXT_DATA__"){
            $f = $element->nodeValue;
            echo $f;
            break;
        }
    }
}

运行代码抛出错误:Undefined property: DOMElement::$id

错误原因

报错是因为当前代码中$element是PHP原生DOMDocument扩展生成的DOMElement实例,id是script标签上的HTML属性,不是DOMElement类的内置公共属性,不能直接通过$element->id的形式访问,直接调用就会触发未定义属性错误。

修复方案

推荐写法(无需遍历,性能更好)

原生DOM提供了直接按ID查询元素的方法,不需要遍历所有script标签,代码更简洁执行效率更高:

// $html_base为已加载目标页面内容的DOMDocument实例
$targetScript = $html_base->getElementById('__NEXT_DATA__');
if ($targetScript) {
    $nextData = $targetScript->nodeValue;
    echo $nextData;
}

遍历逻辑修改版

如果必须遍历所有script标签做判断,将属性访问逻辑改为调用getAttribute()方法获取HTML属性值即可:

foreach($html_base->getElementsByTagName('script') as $element) {
    $id = $element->getAttribute('id');
    if ($id === "__NEXT_DATA__"){
        $f = $element->nodeValue;
        echo $f;
        break;
    }
}

补充说明

如果原本计划使用PHP Simple HTML DOM库而非原生DOM扩展,需要先正确引入库文件,并且使用库提供的file_get_html()或str_get_html()方法加载页面内容,保证操作的是Simple HTML DOM实例而非原生DOMDocument实例,否则依然会出现同类属性不存在的报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:24:15