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

无法捕获/导出部分Cookie的技术求助

解决隐藏Cookie捕获问题的几种实用方法

方法1:通过浏览器性能日志提取请求Cookie

利用php-webdriver开启浏览器的网络性能日志,捕获目标POST请求的请求头,从中提取Cookie:

  1. 初始化ChromeDriver时开启网络日志:
    $chromeOptions = new ChromeOptions();
    $perfLogPrefs = new \Facebook\WebDriver\Chrome\ChromePerformanceLoggingPreferences();
    $perfLogPrefs->enableNetworkLogging();
    $chromeOptions->setPerformanceLoggingPreferences($perfLogPrefs);
    $driver = RemoteWebDriver::create('http://localhost:4444/wd/hub', $chromeOptions);
    
  2. 触发目标操作后,解析日志提取Cookie:
    $logs = $driver->manage()->getLog('performance');
    foreach ($logs as $log) {
        $logData = json_decode($log['message'], true);
        $request = $logData['message']['params']['request'] ?? null;
        if ($request && strpos($request['url'], '你的目标POST接口路径') !== false) {
            $cookieHeader = $request['headers']['Cookie'] ?? '';
            // 解析Cookie键值对
            $targetCookies = [];
            foreach (explode('; ', $cookieHeader) as $pair) {
                list($key, $value) = explode('=', $pair, 2);
                $targetCookies[$key] = $value;
            }
            // 按需使用或保存Cookie
            var_dump($targetCookies);
        }
    }
    

方法2:通过Chrome DevTools协议(CDP)拦截请求

php-webdriver支持直接调用CDP,实时监听请求发送事件获取Cookie:

// 启用网络监听
$driver->executeCdpCommand('Network.enable', []);
// 拦截目标接口请求
$driver->executeCdpCommand('Network.setRequestInterception', [
    'patterns' => [['urlPattern' => '*你的目标接口地址*', 'interceptionStage' => 'Request']]
]);
// 注册请求拦截回调
$driver->on('Network.requestIntercepted', function ($params) use ($driver) {
    $requestHeaders = $params['request']['headers'];
    if (isset($requestHeaders['Cookie'])) {
        // 提取目标Cookie字段
        echo "捕获到Cookie: " . $requestHeaders['Cookie'] . PHP_EOL;
    }
    // 放行请求
    $driver->executeCdpCommand('Network.continueInterceptedRequest', [
        'interceptionId' => $params['interceptionId']
    ]);
});
// 触发触发目标POST请求的操作(比如点击提交按钮)
$driver->findElement(WebDriverBy::id('submit-btn'))->click();

方法3:排查Cookie特殊属性并针对性捕获

你遇到的“隐藏”Cookie大概率带有特殊属性,可通过CDP命令全量获取:

  • 如果是Partitioned分区Cookie(第三方站点隔离存储),普通getCookies()无法获取,用CDP命令提取:
    $allCookies = $driver->executeCdpCommand('Network.getAllCookies', []);
    // 遍历筛选目标Cookie
    foreach ($allCookies['cookies'] as $cookie) {
        if ($cookie['name'] === '你的目标Cookie名') {
            var_dump($cookie);
        }
    }
    
  • 若为SameSite=Strict属性的Cookie,跨站场景下普通存储面板不显示,但CDP命令仍能捕获。

Tampermonkey脚本修复方案

之前监听失败可能是时机或方式不对,试试重写XMLHttpRequest和fetch拦截请求:

// Tampermonkey脚本
(function() {
    'use strict';
    // 拦截XMLHttpRequest
    const originalXhrOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function(method, url) {
        this.addEventListener('loadstart', () => {
            if (method === 'POST' && url.includes('你的目标接口')) {
                const cookie = this.getRequestHeader('Cookie');
                console.log('XHR请求Cookie:', cookie);
                // 可将Cookie发送到本地服务保存
            }
        });
        return originalXhrOpen.apply(this, arguments);
    };
    // 拦截fetch请求
    const originalFetch = window.fetch;
    window.fetch = function(resource, options) {
        if (options?.method === 'POST' && resource.includes('你的目标接口')) {
            const cookie = options.headers?.Cookie || document.cookie;
            console.log('Fetch请求Cookie:', cookie);
        }
        return originalFetch.apply(this, arguments);
    };
})();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:52:44