私がこれらの行を書いている時点で、PuPHPeteer の最新リリースからほぼ 2 年が経過しています。このプロジェクトに対する熱意にもかかわらず、私にはその開発をサポートする動機がもうありません。主な理由は、このプロジェクトが私にとってまったく役に立たなかったからです。正直に言うと、PuPHPeteer はもうメンテナンスされていません。
ただし、コミュニティによって維持されているフォークのリストは次のとおりです。
フォークを作成し、それを保守する予定がある場合は、私に知らせてください。ここにリンクします。
API 全体をサポートする PHP 用の Puppeteer ブリッジ。 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 が必要です。
次の 2 つのコマンド ラインを使用してインストールします。
composer require nesk/puphpeteer
npm install @nesk/puphpeteer
Puppeteer を必要とする代わりに:
const puppeteer = require ( 'puppeteer' ) ;
Puppeteer
クラスをインスタンス化する必要があります。
$ puppeteer = new Puppeteer ;
これにより、PHP によって制御される新しいノード プロセスが作成されます。
いくつかのオプションをコンストラクターに渡すこともできます。Rialto のドキュメントを参照してください。 PuPHPeteer は次のオプションも拡張します。
[
// Logs the output of Browser's console methods (console.log, console.debug, etc...) to the PHP logger
' log_browser_console ' => false ,
]
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
クラスを使用して記述する必要があり、これらの関数の本体は PHP ではなく JavaScript で記述する必要があります。
use Nesk Rialto Data JsFunction ;
$ pageFunction = JsFunction:: createWithParameters ([ ' element ' ])
-> body ( " return element.textContent " );
->tryCatch
でキャッチする必要がありますNode でエラーが発生し、 NodeFatalException
がスローされてプロセスが閉じられると、 Puppeteer
の新しいインスタンスを作成する必要があります。
これを回避するには、命令の前に->tryCatch
を追加して、Node にこれらのエラーをキャッチするように依頼できます。
use Nesk Rialto Exceptions Node ;
try {
$ page -> tryCatch -> goto ( ' invalid_url ' );
} catch ( Node Exception $ exception ) {
// Handle the exception...
}
代わりに、 NodeException
がスローされ、Node プロセスは生きたまま使用可能になります。
MIT ライセンス (MIT)。詳細については、ライセンス ファイルを参照してください。
PuPHPeteer のロゴは次のもので構成されています。
ロゴのアイコンと色を選んでくれた Laravel News に感謝します。