Während ich diese Zeilen schreibe, sind seit der neuesten Veröffentlichung von PuPHPeteer fast zwei Jahre vergangen. Trotz der Begeisterung für dieses Projekt habe ich nicht mehr die Motivation, seine Entwicklung zu unterstützen, vor allem weil es für mich nie wirklich von Nutzen war. Es ist also an der Zeit, ehrlich zu Ihnen zu sein: PuPHPeteer wird nicht mehr gepflegt.
Hier ist jedoch eine Liste der von der Community verwalteten Forks:
Wenn Sie einen Fork erstellen und planen, ihn zu warten, lassen Sie es mich wissen und ich werde ihn hier verlinken.
Eine Puppeteer-Brücke für PHP, die die gesamte API unterstützt. Basierend auf Rialto, einem Paket zur Verwaltung von Node-Ressourcen über PHP.
Hier sind einige Beispiele, die der Dokumentation von Puppeteer entnommen und an die PHP-Syntax angepasst wurden:
Beispiel – Navigieren Sie zu https://example.com und speichern Sie einen Screenshot als 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 ();
Beispiel – Bewerten Sie ein Skript im Kontext der Seite:
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 ();
Dieses Paket erfordert PHP >= 7.3 und Node >= 8.
Installieren Sie es mit diesen beiden Befehlszeilen:
composer require nesk/puphpeteer
npm install @nesk/puphpeteer
Anstatt Puppenspieler zu erfordern:
const puppeteer = require ( 'puppeteer' ) ;
Sie müssen die Puppeteer
-Klasse instanziieren:
$ puppeteer = new Puppeteer ;
Dadurch wird ein neuer, von PHP gesteuerter Node-Prozess erstellt.
Sie können dem Konstruktor auch einige Optionen übergeben, siehe Rialto-Dokumentation. PuPHPeteer erweitert auch diese Optionen:
[
// Logs the output of Browser's console methods (console.log, console.debug, etc...) to the PHP logger
' log_browser_console ' => false ,
]
Wenn Sie Zeitüberschreitungen von mehr als 30 Sekunden verwenden, müssen Sie einen höheren Wert für die Option read_timeout
festlegen (Standard: 35
):
$ puppeteer = new Puppeteer ([
' read_timeout ' => 65 , // In seconds
]);
$ puppeteer -> launch ()-> newPage ()-> goto ( $ url , [
' timeout ' => 60000 , // In milliseconds
]);
await
muss nicht verwendet werdenMit PuPHPeteer erfolgt jeder Methodenaufruf oder das Abrufen/Festlegen von Eigenschaften synchron.
Die folgenden Methoden wurden mit einem Alias versehen, da PHP das $
-Zeichen in Methodennamen nicht unterstützt:
$
=> querySelector
$$
=> querySelectorAll
$x
=> querySelectorXPath
$eval
=> querySelectorEval
$$eval
=> querySelectorAllEval
Verwenden Sie diese Aliase genauso, wie Sie die ursprünglichen Methoden verwendet hätten:
$ divs = $ page -> querySelectorAll ( ' div ' );
JsFunction
erstellt werden Im Kontext der Seite ausgewertete Funktionen müssen mit der JsFunction
-Klasse geschrieben werden, der Hauptteil dieser Funktionen muss in JavaScript statt in PHP geschrieben werden.
use Nesk Rialto Data JsFunction ;
$ pageFunction = JsFunction:: createWithParameters ([ ' element ' ])
-> body ( " return element.textContent " );
->tryCatch
abgefangen werden Wenn in Node ein Fehler auftritt, wird eine NodeFatalException
ausgelöst und der Prozess geschlossen. Sie müssen eine neue Instanz von Puppeteer
erstellen.
Um dies zu vermeiden, können Sie Node bitten, diese Fehler abzufangen, indem Sie Ihrer Anweisung ->tryCatch
voranstellen:
use Nesk Rialto Exceptions Node ;
try {
$ page -> tryCatch -> goto ( ' invalid_url ' );
} catch ( Node Exception $ exception ) {
// Handle the exception...
}
Stattdessen wird eine NodeException
ausgelöst, der Node-Prozess bleibt am Leben und verwendbar.
Die MIT-Lizenz (MIT). Weitere Informationen finden Sie in der Lizenzdatei.
Das Logo von PuPHPeteer besteht aus:
Vielen Dank an Laravel News für die Auswahl der Symbole und Farben des Logos.