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

使用PHP curl请求或查看页面源代码时内容缺失,如何获取完整代码

PHP cURL无法获取动态渲染内容的解决方案

问题原因

cURL仅能获取服务端首次返回的原始HTML内容,不会执行页面内嵌的JavaScript代码。你看到的缺失内容都是页面加载完成后,JS通过接口请求数据、动态插入到DOM里的,和「查看页面源代码看不到、检查元素能看到完整内容」的原理完全一致——检查元素中展示的是浏览器执行完所有JS后生成的最终DOM树,并非原始响应内容。

可行解决方案

  • 方案1:直接抓取动态数据接口(首选)

    打开浏览器开发者工具的「Network」面板,筛选「XHR/ Fetch」类型的请求,刷新页面后即可找到JS动态拉取内容的接口。直接用cURL请求这些接口即可拿到结构化的原始数据,效率远高于渲染整个页面,不需要处理JS执行逻辑。
  • 方案2:使用支持JS渲染的无头浏览器工具

    如果你确实需要完整的最终页面HTML,无法通过接口直接获取,可以通过PHP调用无头浏览器模拟真实浏览器的运行流程,等JS执行完成后再导出DOM内容,常用工具为spatie/browsershot(底层依赖Chrome/Chromium Headless)。
    简单使用示例:
    // 先通过composer安装依赖
    // composer require spatie/browsershot
    use Spatie\Browsershot\Browsershot;
    
    // 获取渲染完成的完整HTML
    $fullHtml = Browsershot::url('你要请求的目标地址')
        ->waitUntilNetworkIdle() // 等待网络请求全部完成
        ->userAgent('你要使用的UA标识')
        ->body();
    

注意事项

  • 无头浏览器渲染的性能远低于原生cURL请求,仅适合小批量请求场景,大规模请求建议优先逆向接口
  • 需要提前在运行环境中安装好Chrome/Chromium浏览器,否则无头浏览器无法正常启动
  • 需注意目标站点的反爬规则,如人机验证、IP限流、Cookie校验等,可根据需要配置代理、请求头、等待时长等参数适配
  • 爬取数据需遵守目标站点的robots协议及相关服务条款,避免违规操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:27:01