You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用PHP Simple HTML DOM Parser获取.p-available-stock内容返回空值的问题

为啥抓不到AliExpress页面的.p-available-stock内容?来解决它!

嘿,我看你用simple_html_dom抓取AliExpress商品页的.p-available-stock内容时只得到空括号,这问题我碰到过不少,咱们一步步拆解原因和解决办法:

1. 核心问题:静态爬虫抓不到动态内容

AliExpress的很多页面元素(包括库存相关的)是通过JavaScript动态渲染出来的,而simple_html_dom只能获取服务器直接返回的静态HTML源码——那些需要浏览器执行JS才会生成的元素,它根本看不到。

你可以先验证这一点:用下面的代码把页面的静态源码存下来,然后打开搜索.p-available-stock,肯定找不到这个元素:

$staticHtml = file_get_contents("你的商品URL");
file_put_contents('static_page.html', $staticHtml);

2. 解决动态内容:用能执行JS的工具

既然静态爬虫不行,咱们得用能模拟浏览器加载页面、执行JS的工具。这里推荐用PHP的spatie/browsershot(它依赖Node.js的puppeteer),步骤如下:

第一步:安装依赖

先通过Composer安装包,同时确保你已经安装了Node.js和puppeteer:

composer require spatie/browsershot
npm install puppeteer

第二步:编写抓取代码

use Spatie\Browsershot\Browsershot;

// 模拟浏览器加载页面,获取完整的动态渲染后的HTML
$fullHtml = Browsershot::url("你的商品URL")
    // 设置真实的浏览器User-Agent,避免被反爬
    ->userAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36')
    // 等待页面加载完成(直到网络空闲)
    ->waitUntilNetworkIdle()
    ->html();

// 再用simple_html_dom解析这个完整的HTML
include("phpdom/simple_html_dom.php");
$dom = str_get_html($fullHtml);
$stockElements = $dom->find(".p-available-stock");

foreach ($stockElements as $element) {
    // 输出元素的内部文本,而不是直接echo元素对象
    echo $element->innertext . PHP_EOL;
}

3. 其他可能的小坑排查

  • 反爬拦截:AliExpress会检测请求的User-Agent,默认file_get_contents的UA太容易被识别。如果不想用无头浏览器,先试试给请求加个真实UA:
$opts = [
    '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"
    ]
];
$context = stream_context_create($opts);
$html = file_get_html("你的商品URL", false, $context);

但如果是动态内容的问题,这个方法还是解决不了。

  • 选择器失效:可能AliExpress已经改了这个元素的类名,你需要打开浏览器开发者工具,重新确认目标元素的正确选择器。

最后总结

simple_html_dom只适合静态页面抓取,面对AliExpress这种大量动态渲染的网站,必须用能执行JS的无头浏览器工具才能拿到完整内容。上面的browsershot方案应该能帮你解决问题。

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

火山引擎 最新活动