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
相关产品推荐
相关产品推荐

