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

如何用PHP获取含Ajax加载内容的网页完整内容?

问题原因

file_get_contents() 仅能获取目标页面的初始静态HTML源码,而你提到的ABC内容是浏览器加载页面后,通过JavaScript发起额外HTTP请求(Ajax)获取并渲染的。PHP的这个函数不会执行页面中的JavaScript,因此无法捕获后续动态加载的内容。

解决方案

方法1:直接调用Ajax接口(最高效)

先定位目标网站加载ABC内容的真实接口:

  • 打开浏览器开发者工具(F12),切换到「网络」标签页,刷新页面;
  • 筛选类型为「XHR/Fetch」的请求,找到返回ABC内容的接口,记录其URL、请求方法(GET/POST)、必要的请求头和参数。

随后直接用PHP请求该接口即可拿到内容:

GET请求示例

$ajaxUrl = "替换为实际的Ajax接口URL";
// 若需要模拟浏览器请求头,可添加上下文
$context = stream_context_create([
    'http' => [
        'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36\r\n" .
                    "X-Requested-With: XMLHttpRequest\r\n"
    ]
]);
$content = file_get_contents($ajaxUrl, false, $context);
echo $content;

POST请求示例(用curl更灵活)

$ajaxUrl = "替换为实际的Ajax接口URL";
$ch = curl_init($ajaxUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 添加必要请求头
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'X-Requested-With: XMLHttpRequest'
]);
// 设置POST参数
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
    'param1' => 'value1',
    'param2' => 'value2'
]));
$content = curl_exec($ch);
curl_close($ch);
echo $content;

方法2:使用PHP无头浏览器库(模拟完整渲染)

如果Ajax接口难以直接定位或存在加密,可使用支持JavaScript渲染的PHP库,模拟真实浏览器加载页面并执行JS,获取渲染后的完整内容。推荐使用symfony/panther:

  1. 安装依赖:
composer require symfony/panther
  1. 编写代码:
require __DIR__.'/vendor/autoload.php';

// 创建Chrome客户端
$client = \Symfony\Component\Panther\Client::createChromeClient();
// 请求目标页面
$crawler = $client->request('GET', 'https://thewebsiteurl');
// 等待Ajax内容加载完成(替换为ABC内容对应的CSS选择器)
$client->waitFor('.abc-content');
// 获取完整渲染后的HTML
$fullContent = $crawler->html();
echo $fullContent;
// 关闭客户端
$client->quit();

方法3:结合Node.js Puppeteer工具

若不想引入PHP库,可使用Puppeteer(Node.js无头浏览器工具)渲染页面,再通过PHP调用获取结果:

  1. 安装Puppeteer:
npm install puppeteer
  1. 创建Node.js脚本(render-page.js):
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  // 等待网络空闲,确保Ajax加载完成
  await page.goto('https://thewebsiteurl', { waitUntil: 'networkidle2' });
  // 获取完整页面HTML
  const fullHtml = await page.content();
  console.log(fullHtml);
  await browser.close();
})();
  1. PHP调用脚本:
$fullContent = shell_exec('node render-page.js');
echo $fullContent;

内容的提问来源于stack exchange,提问作者Na Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:24:17