Au moment où j'écris ces lignes, près de deux ans se sont écoulés depuis la dernière version de PuPHPeteer. Malgré l’engouement autour de ce projet, je n’ai plus la motivation pour soutenir son développement, principalement parce qu’il ne m’a jamais vraiment servi à quelque chose. Il est donc temps d'être honnête avec vous, PuPHPeteer n'est plus maintenu.
Cependant, voici une liste des forks maintenus par la communauté :
Si vous créez un fork et prévoyez de le maintenir, faites-le-moi savoir et je le relierai ici.
Un pont Puppeteer pour PHP, prenant en charge l'intégralité de l'API. Basé sur Rialto, un package pour gérer les ressources Node depuis PHP.
Voici quelques exemples empruntés à la documentation de Puppeteer et adaptés à la syntaxe PHP :
Exemple : accéder à https://example.com et enregistrer une capture d'écran sous 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 ();
Exemple - évaluez un script dans le contexte de la page :
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 ();
Ce package nécessite PHP >= 7.3 et Node >= 8.
Installez-le avec ces deux lignes de commande :
composer require nesk/puphpeteer
npm install @nesk/puphpeteer
Au lieu d'exiger le Marionnettiste :
const puppeteer = require ( 'puppeteer' ) ;
Vous devez instancier la classe Puppeteer
:
$ puppeteer = new Puppeteer ;
Cela créera un nouveau processus Node contrôlé par PHP.
Vous pouvez également transmettre certaines options au constructeur, voir la documentation de Rialto. PuPHPeteer étend également ces options :
[
// Logs the output of Browser's console methods (console.log, console.debug, etc...) to the PHP logger
' log_browser_console ' => false ,
]
Si vous utilisez des délais d'attente supérieurs à 30 secondes, vous devrez définir une valeur plus élevée pour l'option read_timeout
(par défaut : 35
) :
$ puppeteer = new Puppeteer ([
' read_timeout ' => 65 , // In seconds
]);
$ puppeteer -> launch ()-> newPage ()-> goto ( $ url , [
' timeout ' => 60000 , // In milliseconds
]);
await
Avec PuPHPeteer, chaque appel de méthode ou obtention/définition de propriété est synchrone.
Les méthodes suivantes ont été alias car PHP ne prend pas en charge le caractère $
dans les noms de méthodes :
$
=> querySelector
$$
=> querySelectorAll
$x
=> querySelectorXPath
$eval
=> querySelectorEval
$$eval
=> querySelectorAllEval
Utilisez ces alias comme vous auriez utilisé les méthodes originales :
$ divs = $ page -> querySelectorAll ( ' div ' );
JsFunction
Les fonctions évaluées dans le contexte de la page doivent être écrites avec la classe JsFunction
, le corps de ces fonctions doit être écrit en JavaScript au lieu de PHP.
use Nesk Rialto Data JsFunction ;
$ pageFunction = JsFunction:: createWithParameters ([ ' element ' ])
-> body ( " return element.textContent " );
->tryCatch
Si une erreur se produit dans Node, une NodeFatalException
sera levée et le processus fermé, vous devrez créer une nouvelle instance de Puppeteer
.
Pour éviter cela, vous pouvez demander à Node de détecter ces erreurs en faisant précéder votre instruction de ->tryCatch
:
use Nesk Rialto Exceptions Node ;
try {
$ page -> tryCatch -> goto ( ' invalid_url ' );
} catch ( Node Exception $ exception ) {
// Handle the exception...
}
Au lieu de cela, une NodeException
sera levée, le processus Node restera actif et utilisable.
La licence MIT (MIT). Veuillez consulter le fichier de licence pour plus d'informations.
Le logo de PuPHPeteer est composé de :
Merci à Laravel News pour avoir choisi les icônes et les couleurs du logo.