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

PHP DOM Crawler是否有方法可点击网页元素加载更多内容?

爬虫点击加载更多按钮实现方案

你当前使用的Goutte客户端仅支持发送HTTP请求获取静态HTML,无法执行页面内的JavaScript逻辑,而你要点击的a标签绑定的是JS触发的加载事件,因此原生Goutte无法实现点击加载更多的操作,可选择以下两种方案实现需求:

方案1:使用支持JS运行的无头浏览器库Panther

该方案和你现有Crawler语法兼容,改动量小,适合不想抓接口的场景。

  • 第一步:安装依赖
composer require symfony/panther
  • 第二步:替换原有代码,实现循环点击加载
<?php
require __DIR__.'/vendor/autoload.php';

use Symfony\Component\Panther\Client;

$url = "https://www.thegioididong.com/dtdd";
// 初始化Chrome无头客户端
$client = Client::createChromeClient();
$crawler = $client->request('GET', $url);

// 循环点击直到加载更多按钮隐藏
while (true) {
    $viewMore = $crawler->filter('div.view-more');
    // 判断是否还有更多可加载
    if ($viewMore->count() === 0 || str_contains($viewMore->attr('style'), 'display: none')) {
        break;
    }
    // 点击加载更多按钮
    $client->click($viewMore->filter('a')->link());
    // 等待页面加载完成,避免重复点击
    $client->waitForStaleness($viewMore);
    $crawler = $client->getCrawler();
}

// 此处编写你提取全部商品数据的逻辑

方案2:直接抓AJAX接口(效率更高)

你可以通过浏览器F12开发者工具的网络面板,点击加载更多按钮时捕获对应的AJAX请求,直接循环调用该接口获取商品数据。这种方式不需要启动浏览器,运行速度更快,资源占用更低:

  • 点击加载更多时找到对应请求接口,一般会携带页码、分页数量参数
  • 循环修改分页参数发送请求,解析返回的JSON数据即可拿到全量商品

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:57:03