Saat saya menulis baris ini, sudah hampir dua tahun sejak rilis terbaru PuPHPeteer. Meskipun ada antusiasme terhadap proyek ini, saya tidak lagi memiliki motivasi untuk mendukung pengembangannya, terutama karena proyek ini tidak pernah benar-benar berguna bagi saya. Jadi ini saatnya jujur kepada Anda, PuPHPeteer sudah tidak dikelola lagi.
Namun, berikut daftar garpu yang dikelola komunitas:
Jika Anda membuat fork dan berencana memeliharanya, beri tahu saya dan saya akan menautkannya di sini.
Jembatan Dalang untuk PHP, mendukung seluruh API. Berdasarkan Rialto, sebuah paket untuk mengelola sumber daya Node dari PHP.
Berikut beberapa contoh yang dipinjam dari dokumentasi Puppeteer dan disesuaikan dengan sintaks PHP:
Contoh - menavigasi ke https://example.com dan menyimpan tangkapan layar sebagai 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 ();
Contoh - mengevaluasi skrip dalam konteks halaman:
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 ();
Paket ini membutuhkan PHP >= 7.3 dan Node >= 8.
Instal dengan dua baris perintah ini:
composer require nesk/puphpeteer
npm install @nesk/puphpeteer
Daripada membutuhkan Dalang:
const puppeteer = require ( 'puppeteer' ) ;
Anda harus membuat instance kelas Puppeteer
:
$ puppeteer = new Puppeteer ;
Ini akan membuat proses Node baru yang dikendalikan oleh PHP.
Anda juga dapat meneruskan beberapa opsi ke konstruktor, lihat dokumentasi Rialto. PuPHPeteer juga memperluas opsi berikut:
[
// Logs the output of Browser's console methods (console.log, console.debug, etc...) to the PHP logger
' log_browser_console ' => false ,
]
Jika Anda menggunakan beberapa batas waktu lebih tinggi dari 30 detik, Anda harus menetapkan nilai yang lebih tinggi untuk opsi read_timeout
(default: 35
):
$ puppeteer = new Puppeteer ([
' read_timeout ' => 65 , // In seconds
]);
$ puppeteer -> launch ()-> newPage ()-> goto ( $ url , [
' timeout ' => 60000 , // In milliseconds
]);
await
Dengan PuPHPeteer, setiap pemanggilan metode atau pengambilan/pengaturan properti bersifat sinkron.
Metode berikut ini diberi alias karena PHP tidak mendukung karakter $
dalam nama metode:
$
=> querySelector
$$
=> querySelectorAll
$x
=> querySelectorXPath
$eval
=> querySelectorEval
$$eval
=> querySelectorAllEval
Gunakan alias berikut seperti Anda menggunakan metode asli:
$ divs = $ page -> querySelectorAll ( ' div ' );
JsFunction
Fungsi yang dievaluasi dalam konteks halaman harus ditulis dengan kelas JsFunction
, isi fungsi ini harus ditulis dalam JavaScript, bukan PHP.
use Nesk Rialto Data JsFunction ;
$ pageFunction = JsFunction:: createWithParameters ([ ' element ' ])
-> body ( " return element.textContent " );
->tryCatch
Jika kesalahan terjadi di Node, NodeFatalException
akan dilempar dan proses ditutup, Anda harus membuat instance Puppeteer
baru.
Untuk menghindarinya, Anda dapat meminta Node untuk menangkap kesalahan ini dengan menambahkan instruksi Anda ->tryCatch
:
use Nesk Rialto Exceptions Node ;
try {
$ page -> tryCatch -> goto ( ' invalid_url ' );
} catch ( Node Exception $ exception ) {
// Handle the exception...
}
Sebaliknya, NodeException
akan dilempar, proses Node akan tetap hidup dan dapat digunakan.
Lisensi MIT (MIT). Silakan lihat File Lisensi untuk informasi lebih lanjut.
Logo PuPHPeteer terdiri dari:
Terima kasih kepada Laravel News yang telah memilih ikon dan warna logo.