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

如何用PHP结合无头浏览器实现类似Selenium的Cookie抓取?

PHP获取JavaScript生成的Cookie方案

问题根源

你用curl只能获取服务器端通过HTTP响应头Set-Cookie设置的Cookie,这类Cookie是后端(比如PHP)生成并发送给客户端的。而JavaScript生成的Cookie是在浏览器环境中通过document.cookie设置的,curl作为纯HTTP请求工具,不会执行页面中的JavaScript,自然无法捕获这类客户端生成的Cookie。

PHP替代Selenium的解决方案

要获取JS生成的Cookie,必须使用能模拟完整浏览器环境、执行JavaScript的工具,以下是两种可行的PHP方案:

1. 使用php-webdriver(Selenium的PHP客户端)

php-webdriver是Selenium官方的PHP绑定,能调用ChromeDriver、GeckoDriver等浏览器驱动,模拟真实浏览器的行为,从而获取包括JS生成在内的所有Cookie。

示例代码:

require_once('vendor/autoload.php');

use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Chrome\ChromeOptions;

// 初始化ChromeDriver(需提前安装ChromeDriver并启动,或指定本地路径)
$options = new ChromeOptions();
$options->addArguments(['--headless']); // 无头模式,不显示浏览器窗口
$capabilities = DesiredCapabilities::chrome()->setCapability(ChromeOptions::CAPABILITY, $options);

$driver = RemoteWebDriver::create('http://localhost:9515', $capabilities);

// 访问目标页面
$driver->get('https://www.google.com/');

// 获取所有Cookie(包括JS生成的)
$cookies = $driver->manage()->getCookies();

// 格式化输出
$cookieArray = [];
foreach ($cookies as $cookie) {
    $cookieArray[$cookie->getName()] = $cookie->getValue();
}
var_dump($cookieArray);

// 关闭浏览器
$driver->quit();

2. 使用Puppeteer-PHP(无头浏览器工具)

Puppeteer-PHP是Node.js Puppeteer的PHP封装,能直接控制无头Chrome/Chromium,支持执行JS、获取Cookie等操作,无需额外启动Selenium服务。

示例代码:

require_once('vendor/autoload.php');

use Nesk\Puphpeteer\Puppeteer;

$puppeteer = new Puppeteer();
$browser = $puppeteer->launch([
    'headless' => true, // 无头模式
]);

$page = $browser->newPage();
$page->goto('https://www.google.com/');

// 获取所有Cookie
$cookies = $page->cookies();

// 格式化输出
$cookieArray = [];
foreach ($cookies as $cookie) {
    $cookieArray[$cookie['name']] = $cookie['value'];
}
var_dump($cookieArray);

// 关闭浏览器
$browser->close();

你原来的curl脚本(仅获取服务器端Cookie)

$ch = curl_init('https://www.google.com/');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$result = curl_exec($ch);

preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches);
$cookies = array();
foreach($matches[1] as $item) {
    parse_str($item, $cookie);
    $cookies = array_merge($cookies, $cookie);
}
var_dump($cookies);

内容的提问来源于stack exchange,提问作者cookie-newb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:03:19