avatar

麦兜的小站

MDO.INK

  • 首页
  • 随笔
  • 知识库
  • 归档
  • 动态
  • 标签
  • 关于
Home Puphpeteer:Chrome 无头浏览器 Puphpeteer 项目的 PHP 桥梁
文章

Puphpeteer:Chrome 无头浏览器 Puphpeteer 项目的 PHP 桥梁

Posted 2025-07-1 Updated 2025-07- 1
By power 已删除用户
4~5 min read

PuPHPeteer 有着和 Puppeteer 相似的例子,让我们试着用 PHP 来调用这些 API 吧。

这里有一个页面导航和截图的例子:

use NeskPuPHPeteerPuppeteer;

$puppeteer = new Puppeteer;
$browser = $puppeteer->launch();

$page = $browser->newPage();
$page->goto('https://example.com');
$page->screenshot(['path' => 'example.png']);

$browser->close(); 

这是一个在页面上执行 JS 脚本的例子:

use NeskPuPHPeteerPuppeteer;
use NeskRialtoDataJsFunction;

$puppeteer = new Puppeteer;

$browser = $puppeteer->launch();
$page = $browser->newPage();
$page->goto('https://example.com');

// 通过JS来获取页面的尺寸信息
$dimensions = $page->evaluate(JsFunction::create("
    return {
        width: document.documentElement.clientWidth,
        height: document.documentElement.clientHeight,
        deviceScaleFactor: window.devicePixelRatio
    };
"));

printf('Dimensions: %s', print_r($dimensions, true));

$browser->close(); 

一些区别#

我认为最显著的区别,就是在 PuPHPeteer 中每个方法的调用都是同步的。

虽然 PuPHPeteer 支持所有 Node 版 Puppeteer 的 API,但还是有一些重要的不同点。最大的一点就是创建 new Puppeteer; 实例,而不是 Node 上使用 require('puppeteer') 的方式。当你通过 new Puppeteer; 创建一个实例的时候,实际上创建了一个由 PHP 控制的 Node 进程。

接下来,你可以给构造器设置参数:

[
    // Node 可执行命令的路径,如果 Node 已经在 PATH 里,就只要这样写就好了
    'executable_path' => 'node',

    // 进程可以阻塞多久(秒)不被终止,
    'idle_timeout' => 60,

    // 一个指令在返回结果前最多等待多久(秒)
    'read_timeout' => 30,

    // 关闭进程时最多等待多久(秒)
    'stop_timeout' => 3,

    // 调试用的 logger 实例 (必须实现 PsrLogLoggerInterface)
    'logger' => null,

    // 开启调试模式(会自动做如下操作):
    //   - 添加参数 --inspect 到 Node 命令中
    //   - 追加堆栈跟踪信息到 Node 的报错消息中
    'debug' => false,
] 

PuPHPeteer 要求 PHP >= 7.1 并且 Node >= 8 。可以到 GitHub repo 查看完整的 readme 和 安装说明。

知识库
License:  CC BY 4.0
Share

Further Reading

Jul 31, 2025

如何实现接口幂等性

通俗的说,用户在系统中有操作,不管重复多少次,都应该产生一样的效果或返回一样的结果的。 幂等性的概念 幂等(Idempotent)是一个数学与计算机学的概念,常见于抽象代数中。 f(n)=1^n//无...

Jul 19, 2025

10个npm工具包

有了npm之后,前端人员真的是过上好日子了。我们可以直接把别人写好的工具包拿来用,非常的方便。 1.day.js-轻量日期处理 npminstalldayjs importdayjsfrom'd...

Jul 17, 2025

How to set up PHP7.4 on MacOS.

Thisisallverywellandgood.Apartfromonesmallinsignificantthing… TheversionofPHPinuseiscurrently7.4. Th...

OLDER

github 获取生成 token 的方法

NEWER

PHP PhantomJS - 无头浏览器的强大库

Recently Updated

  • 如何实现接口幂等性
  • 10个npm工具包
  • How to set up PHP7.4 on MacOS.
  • Automa:一键自动化,网页数据采集与工作流程优化专家Automa:解锁自动化
  • Mac 下用 brew 搭建 LNMP

Trending Tags

thinkphp clippings

Contents

©2025 麦兜的小站. Some rights reserved.

Using the Halo theme Chirpy