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

使用PHP Simple HTML DOM Parser获取页面span值时触发致命错误:Call to a member function find() on bool

解决PHP调用find()时的布尔值致命错误

嘿,这个错误的根源其实很清晰:file_get_html()没成功拿到目标页面的HTML内容,返回了false(布尔值),你直接对这个布尔值调用find()方法,肯定会触发致命错误。咱们一步步来搞定它:

1. 先排查file_get_html失败的原因

像Investing.com这类网站,会通过检查请求头拦截非浏览器发起的请求。你可以先增加错误检测,再换带请求头的方式尝试请求:

<?php
include('simple_html_dom.php');

// 先尝试直接获取页面,失败则换带请求头的方式
$html = file_get_html('https://ru.investing.com/commodities/gold');

if (!$html) {
    // 模拟Chrome浏览器的请求头,绕过基础反爬限制
    $context = stream_context_create([
        'http' => [
            'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\r\n"
        ]
    ]);
    
    // 用file_get_contents带请求头获取原始HTML内容
    $rawHtml = file_get_contents('https://ru.investing.com/commodities/gold', false, $context);
    
    if ($rawHtml === false) {
        die('无法获取页面内容,请检查网络连接或目标网站的访问限制');
    }
    
    // 将原始HTML转换为simple_html_dom对象
    $html = str_get_html($rawHtml);
}

// 查找元素前先检查元素是否存在,避免再次报错
$targetSpan = $html->find("span[class=arial_26 inlineblock pid-8830-last]", 0);
if ($targetSpan) {
    echo $targetSpan->plaintext;
} else {
    echo '未找到指定的span元素!请打开目标页面开发者工具,确认元素class是否正确';
}
?>

2. 核心修复点说明

  • 添加浏览器请求头:这是绕开基础反爬的关键,Investing.com会拒绝不带User-Agent的请求,模拟常见浏览器的标识即可正常访问。
  • 增加多层错误检测:先确认HTML对象创建成功,再确认目标元素存在,彻底避免“调用布尔值的成员方法”这类致命错误。
  • 灵活切换解析方式:当file_get_html直接请求失败时,改用file_get_contents获取原始内容再解析,兼容性更强。

3. 额外注意事项

  • 先确认simple_html_dom.php的文件路径正确,不要出现引入错误。
  • 如果还是无法获取内容,可能网站有更严格的反爬机制(如Cookie验证、IP限制),此时可以尝试使用cURL库发起请求,功能更强大。
  • 最后核对元素选择器:网站的class可能会动态变化,打开目标页面按F12进入开发者工具,确认目标span的class是否确实为arial_26 inlineblock pid-8830-last。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:37:34