laikunqi / puphpeteer
PHP 的 Puppeteer 桥接器,支持完整 API。puppeteer 版本号 5.4.1
Requires
- php: >=7.3
- nesk/rialto: ^1.2.0
- psr/log: ^1.0
- vierbergenlars/php-semver: ^3.0.2
Requires (Dev)
- monolog/monolog: ^2.0
- phpunit/phpunit: ^9.0
- symfony/process: ^4.0|^5.0
This package is not auto-updated.
Last update: 2024-09-25 18:48:13 UTC
README
一个用于 PHP 的 Puppeteer 桥接器,支持完整 API。基于 Rialto,一个用于从 PHP 管理Node资源的包。
以下是来自 Puppeteer 文档的示例 借用 并适配到 PHP 语法
示例 - 导航到 https://example.com 并将截图保存为 example.png
use Nesk\Puphpeteer\Puppeteer; $puppeteer = new Puppeteer; $browser = $puppeteer->launch(); $page = $browser->newPage(); $page->goto('https://example.com'); $page->screenshot(['path' => 'example.png']); $browser->close();
示例 - 在页面上下文中评估脚本
use Nesk\Puphpeteer\Puppeteer; use Nesk\Rialto\Data\JsFunction; $puppeteer = new Puppeteer; $browser = $puppeteer->launch(); $page = $browser->newPage(); $page->goto('https://example.com'); // Get the "viewport" of the page, as reported by the page. $dimensions = $page->evaluate(JsFunction::createWithBody(" return { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight, deviceScaleFactor: window.devicePixelRatio }; ")); printf('Dimensions: %s', print_r($dimensions, true)); $browser->close();
要求和安装
此包需要 PHP >= 7.3 和 Node >= 8。
使用以下两条命令行安装
composer require nesk/puphpeteer npm install @nesk/puphpeteer
PuPHPeteer 和 Puppeteer 之间的显著差异
Puppeteer 的类必须实例化
而不是要求 Puppeteer
const puppeteer = require('puppeteer');
您必须实例化 Puppeteer 类
$puppeteer = new Puppeteer;
这将创建一个由 PHP 控制的新的 Node 进程。
您还可以将一些选项传递给构造函数,请参阅 Rialto 的文档。PuPHPeteer 也扩展了这些选项
[
// Logs the output of Browser's console methods (console.log, console.debug, etc...) to the PHP logger
'log_browser_console' => false,
]
⏱ 想要在 Puppeteer 的 API 中使用超过 30 秒的某些超时?
如果您使用超过 30 秒的某些超时,您必须将 read_timeout 选项(默认为 35)设置为更高的值
$puppeteer = new Puppeteer([ 'read_timeout' => 65, // In seconds ]); $puppeteer->launch()->newPage()->goto($url, [ 'timeout' => 60000, // In milliseconds ]);
不需要使用 await 关键字
在 PuPHPeteer 中,每个方法调用或属性获取/设置都是同步的。
一些方法已经被别名
以下方法已经被别名,因为 PHP 不支持方法名中的 $ 字符
$>querySelector$$>querySelectorAll$x>querySelectorXPath$eval>querySelectorEval$$eval>querySelectorAllEval
就像使用原始方法一样使用这些别名
$divs = $page->querySelectorAll('div');
必须使用 JsFunction 创建评估函数
在页面上下文中评估的函数必须使用 JsFunction 类 创建,这些函数的正文必须用 JavaScript 而不是 PHP 编写。
use Nesk\Rialto\Data\JsFunction; $pageFunction = JsFunction::createWithParameters(['element']) ->body("return element.textContent");
必须使用 ->tryCatch 捕获异常
如果在 Node 中发生错误,将抛出 Node\FatalException 并关闭进程,您必须创建一个新的 Puppeteer 实例。
为了避免这种情况,您可以在您的指令前加上 ->tryCatch
use Nesk\Rialto\Exceptions\Node; try { $page->tryCatch->goto('invalid_url'); } catch (Node\Exception $exception) { // Handle the exception... }
相反,将抛出 Node\Exception,Node 进程将继续存活并可使用。
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。
标志归属
PuPHPeteer 的标志由以下组成
- Puppet 由 Luis Prado 提供,来自 Noun Project。
- 大象,由Lluisa Iborra创作,来自名词项目。
感谢Laravel News选择了标志的图标和颜色。
