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

使用spatie/crawler爬取JS渲染站点时无法获取渲染后HTML如何解决

解决spatie/crawler无法获取JS渲染后HTML的方案

你之前的配置没有给页面留足够的JS执行和渲染时间,爬虫在JS还没把DOM渲染出来就已经拉取了原始HTML内容,所以拿到的都是未渲染的脚本代码,按以下步骤调整即可:

  • 给Browsershot配置页面等待规则,确保JS执行完成、目标元素渲染出来再返回内容。推荐优先使用等待指定元素加载的方案,比固定等待更高效稳定:
$crawler = Crawler::create();
$browsershot = new Browsershot();
$browsershot->noSandbox()
    // 等待页面基础加载完成
    ->waitForFunction('document.readyState === "complete"')
    // 等待你需要的登录表单元素渲染完成,最多等待5000毫秒
    ->waitForSelector('#loginform', 5000)
    // 可选:如果页面依赖大量接口渲染,加这行等所有网络请求结束
    ->waitUntilNetworkIdle();
$crawler->setBrowsershot($browsershot);
$crawler
->executeJavaScript()
->ignoreRobots()
->setCrawlObserver(new Observer())
->startCrawling($url);
  • 确认获取内容的位置正确:渲染后的完整HTML会直接包含在CrawlObserver的crawled方法传入的$response对象中,在该方法内调用$response->getBody()->getContents()即可拿到渲染完成的内容,不要在爬虫执行结束后调用未关联渲染上下文的响应对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:04