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

如何在PHP中使用Headless Chrome获取网站触发的请求数据?

解决方案

PHP 生态方案(优先推荐)

用symfony/panther——基于Headless Chrome/Firefox的PHP库,能完整模拟浏览器环境,自动处理会话、Cookie和动态渲染,还能拦截网络请求拿到原始响应。

操作步骤:

  1. 安装依赖:
composer require symfony/panther
  1. 编写拦截请求的代码:
<?php

require __DIR__.'/vendor/autoload.php';

use Symfony\Component\Panther\Client;

// 初始化Headless Chrome客户端
$client = Client::createChromeClient();

// 注入脚本拦截目标请求(替换成你在Network面板看到的请求URL特征)
$client->getWebDriver()->executeScript("
    const originalFetch = window.fetch;
    window.fetch = async (...args) => {
        const response = await originalFetch(...args);
        // 匹配目标请求的URL标识,比如包含'/api/time-detail'的请求
        if (args[0].includes('/api/time-detail')) {
            const data = await response.clone().json();
            // 把数据存到全局变量,方便PHP读取
            window.targetTimeData = data;
        }
        return response;
    };
");

// 访问目标页面,触发动态加载逻辑
$crawler = $client->request('GET', 'https://目标网站的URL');

// 等待页面加载完成(可换成等待特定元素出现,更精准)
$client->waitFor('.动态加载元素的选择器');

// 读取全局变量里的时间数据
$timeData = $client->getWebDriver()->executeScript('return window.targetTimeData;');

// 后续处理数据
var_dump($timeData);

// 关闭客户端
$client->quit();

这个方案的核心是完全模拟浏览器行为,自动处理跨域、Cookie和复杂请求参数,不用手动复现那些难搞的请求头。

JavaScript 方案(Headless Chrome + Puppeteer)

如果PHP方案受限,可使用Node.js的Puppeteer直接控制Headless Chrome拦截请求:

操作步骤:

  1. 安装依赖:
npm install puppeteer
  1. 编写代码:
const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({ headless: 'new' });
    const page = await browser.newPage();

    // 开启请求拦截
    await page.setRequestInterception(true);
    page.on('request', (request) => request.continue());

    // 监听响应,匹配目标请求
    page.on('response', async (response) => {
        if (response.url().includes('/api/time-detail')) {
            const timeData = await response.json();
            console.log('精确时间数据:', timeData);
            // 可将数据写入文件或传递给其他服务
        }
    });

    // 访问目标页面,等待网络空闲确保请求完成
    await page.goto('https://目标网站的URL', { waitUntil: 'networkidle2' });

    await browser.close();
})();

关键注意事项

  • 把代码里的/api/time-detail替换成你在Network面板找到的请求URL特征(比如特定路径、参数)
  • 页面等待逻辑可根据实际调整,比如等待特定元素加载完成,比固定等待时间更可靠
  • 部分网站有反爬机制,可通过设置浏览器UA、禁用自动化特征检测来规避,Panther和Puppeteer都支持相关配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:47:21