이 글을 쓰고 있는 지금, PuPHPeteer의 최신 릴리스 이후 거의 2년이 지났습니다. 이 프로젝트에 대한 열정에도 불구하고 나는 더 이상 이 프로젝트 개발을 지원할 동기가 없습니다. 주로 이 프로젝트가 나에게 전혀 도움이 되지 않았기 때문입니다. 이제 솔직히 말해서 PuPHeteer는 더 이상 유지 관리되지 않습니다.
그러나 커뮤니티에서 유지 관리하는 포크 목록은 다음과 같습니다.
포크를 만들고 유지 관리할 계획이 있는 경우 알려주시면 여기에 링크해 드리겠습니다.
전체 API를 지원하는 PHP용 Puppeteer 브리지입니다. PHP에서 노드 리소스를 관리하는 패키지인 Rialto를 기반으로 합니다.
다음은 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
Puppeteer를 요구하는 대신:
const puppeteer = require ( 'puppeteer' ) ;
Puppeteer
클래스를 인스턴스화해야 합니다.
$ puppeteer = new Puppeteer ;
그러면 PHP로 제어되는 새로운 노드 프로세스가 생성됩니다.
생성자에 몇 가지 옵션을 전달할 수도 있습니다. Rialto 문서를 참조하세요. PuPHeteer는 다음 옵션도 확장합니다.
[
// 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). 자세한 내용은 라이센스 파일을 참조하십시오.
PuPHeteer의 로고는 다음과 같이 구성됩니다.
로고의 아이콘과 색상을 선택해주신 Laravel News에게 감사드립니다.