웹 사이트 스크린샷
웹사이트의 스크린샷을 PHP로 찍어 파일로 저장하는 방법이 있습니까?
마지막 편집: 7년이 지난 지금도 이 답변에 대한 표를 얻고 있지만, 이 답변이 훨씬 더 정확해졌다고 생각합니다.
물론 가능합니다만, 뭔가로 페이지를 렌더링해야 합니다.정말로 php만을 사용하고 싶다면 HTMLTOPS를 추천합니다.HTMLTOPS는 페이지를 렌더링하여 ps 파일(ghostscript)로 출력한 후 .jpg, .png, .pdf로 변환합니다.복잡한 페이지에서는 속도가 다소 느려질 수 있습니다(또한 모든 CSS를 지원하는 것은 아닙니다).
또는 wkhtmltopdf를 사용하여 html 페이지를 pdf, jpg 등으로 출력할 수 있습니다.CSS2.0에 동의하고 웹킷(safari의 래퍼)을 사용하여 페이지를 렌더링합니다.그러니 괜찮을 거야서버에도 설치해야 합니다.
UPDATE Now는 새로운 HTML5 및 JS 기능을 통해 JavaScript를 사용하여 페이지를 캔버스 오브젝트로 렌더링할 수도 있습니다.그러기 위한 좋은 라이브러리가 여기에 있습니다.Html2Canvas 및 다음은 G+와 같은 피드백을 받기 위해 동일한 작성자가 구현한 것입니다.돔을 캔버스에 렌더링하면 아약스를 통해 서버에 전송하여 jpg로 저장할 수 있습니다.
편집: Imagemagick 도구를 사용하여 pdf를 png로 변환할 수 있습니다.내 버전의 wkhtmltopdf는 이미지를 지원하지 않습니다.예.convert html.pdf -append html.png
.
편집: 이 작은 셸 스크립트는 php5-cli를 사용하는 Linux 및 위에서 설명한 툴에서의 단순하고 동작하는 사용 예를 보여줍니다.
편집: wkhtmltopdf 팀이 다른 프로젝트를 진행하고 있는 것을 알게 되었습니다.wkhtmltoimage는 jpg를 직접 제공합니다.
PHP 5.2.2이므로 PHP만으로 웹 사이트를 캡처할 수 있습니다!
imagegrabscreen : 화면 전체를 캡처합니다.
<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
imagegrabwindow - 윈도 핸들(COM 인스턴스의 HWND 속성)을 사용하여 창 또는 해당 클라이언트 영역을 가져옵니다.
<?php
$Browser = new COM('InternetExplorer.Application');
$Browserhandle = $Browser->HWND;
$Browser->Visible = true;
$Browser->Fullscreen = true;
$Browser->Navigate('http://www.stackoverflow.com');
while($Browser->Busy){
com_message_pump(4000);
}
$img = imagegrabwindow($Browserhandle, 0);
$Browser->Quit();
imagepng($img, 'screenshot.png');
?>
편집: 이러한 기능은 Windows 시스템에서만 사용할 수 있습니다.
서드파티 툴을 사용하고 싶지 않다면 Google Page Insight api를 사용하는 간단한 솔루션을 제안합니다.
를 params API라고 부르면 screenshot=true
.
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
패스 " " "&strategy=mobile
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
Phantom과 같은 간단한 헤드리스 브라우저를 사용할 수 있습니다.JS가 페이지를 잡습니다.
팬텀을 사용할 수도 있습니다.JS(PHP 포함)
이 작은 php 스크립트를 확인해 주세요.여기를 봐주세요.https://github.com/microweber/screen
다음은 API입니다.http://screen.microweber.com/shot.php?url=https : //stackoverflow.com/questions/757675/website-screenshots-using-php
많은 선택지가 있고 그들은 모두 장단점을 가지고 있다.다음은 구현 난이도별로 정렬된 옵션 목록입니다.
옵션 1: API 사용(가장 간단)
장점
- Javascript 실행
- 거의 완벽한 렌더링
- 캐시 옵션이 올바르게 사용되는 경우 고속화
- 확장은 API에 의해 처리됩니다.
- 정확한 타이밍, 뷰포트...
- 대부분의 경우 무료 요금제를 제공합니다.
단점
- 많이 사용할 계획이라면 무료가 아닙니다.
옵션 2: 사용 가능한 많은 라이브러리 중 하나를 사용합니다.
- 돔 투 이미지
- wkhtmltoimage(wkhtmltopdf 툴에 추가)
- phpwkhtmltopdf
- ...
장점
- 대부분의 경우 변환이 매우 빠릅니다.
단점
- 렌더링 불량
- javascript를 실행하지 않음
- 최신 웹 기능(FlexBox, Advanced Selectors, Webfonts, 박스 크기 조정, 미디어 쿼리, HTML5 태그 등)은 지원되지 않습니다.
- 설치가 쉽지 않을 수 있음
- 확장이 복잡함
옵션 3: PhantomJs 및 래퍼 라이브러리 사용
- 팬텀 JS
- php-phantomjs(Php 래퍼 라이브러리 for PhantomJs)
- ...
장점
- Javascript 실행
- 꽤 빠르다
단점
- 렌더링 불량
- PhantomJs는 더 이상 사용되지 않으며 더 이상 유지 관리되지 않습니다.
- 최신 웹 기능(FlexBox, Advanced Selectors, Webfonts, 박스 크기 조정, 미디어 쿼리, HTML5 태그 등)은 지원되지 않습니다.
- 확장이 복잡함
- 로드해야 할 이미지가 있는 경우 작동하기가 쉽지 않습니다.
옵션 4: Chrome Headless 및 래퍼 라이브러리 사용
- 크롬 헤드리스
- 크롬 개발 도구 매개체
- 번데기
- ...
장점
- Javascript 실행
- 거의 완벽한 렌더링
단점
- 다음 사항에 대해 정확히 원하는 결과를 얻기란 쉽지 않습니다.
- 페이지 로드 타이밍
- 프록시 통합
- 자동 스크롤
- ...
- 확장이 복잡함
- html에 외부 링크가 포함되어 있는 경우 매우 느리고 더 느립니다.
면책사항:저는 ApiFlash의 설립자입니다.저는 정직하고 유익한 답변을 드리기 위해 최선을 다했습니다.
음, 팬텀JS는 서버에 쉽게 배치하여 php에 통합할 수 있는 브라우저입니다.코드는 WDudes에서 찾을 수 있습니다.이미지 크기, 캐시, 파일 다운로드 또는 img src 디스플레이 지정 등의 기능이 많이 포함되어 있습니다.
<img src=”screenshot.php?url=google.com” />
URL 파라미터
폭 및 높이: screensshot.http?url=google.com&w=1000&h=800
크롭 포함 : screensshot.http?url=google.com&w=1000&h=800&clipw=800&cliph=600
스크리슨핫
google.com&cache=.http?url=google.com&cache=0이미지를 다운로드하려면 screenshot.discl?url=google.com&download=true
자습서: API 없이 PHP를 사용하여 웹 사이트의 스크린샷 캡처
cutycapt는 웹 페이지를 대부분의 이미지 형식(jpg, png..)에 저장합니다.시냅틱에서 다운로드하면 wkhtmltopdf보다 훨씬 잘 작동합니다.
드디어 @boxiora의 제안대로 마이크로웹/스크린을 사용하여 셋업을 했습니다.
처음에 여기 링크에 접속했을 때 얻은 것은 다음과 같습니다.
Please download this script from here https://github.com/microweber/screen
Linux linux linux linux linux linux linux linux linux linux linux linux 。따라서 실행을 원하시면 고객님의 환경에 맞게 제 단계를 조정해 주십시오.
여기 내 껍데기 위에서 했던 단계가 있다.DOCUMENT_ROOT
★★★★
$ sudo wget https://github.com/microweber/screen/archive/master.zip
$ sudo unzip master.zip
$ sudo mv screen-master screen
$ sudo chmod +x screen/bin/phantomjs
$ sudo yum install fontconfig
$ sudo yum install freetype*
$ cd screen
$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo php composer.phar update
$ cd ..
$ sudo chown -R apache screen
$ sudo chgrp -R www screen
$ sudo service httpd restart
에 「」를 포인트 합니다.screen/demo/shot.php?url=google.com
스크린샷을 보면 끝입니다.상세 설정에 대한 자세한 내용은 이쪽과 이쪽에서 확인하실 수 있습니다.
스크린샷을 생성할 수 있는 오픈소스 프로젝트는 많이 있습니다.예를 들어 팬텀JS, webkit2png 등
이러한 프로젝트의 큰 문제는 오래된 브라우저 테크놀로지에 기반하여 많은 사이트, 특히 지난 몇 개월 또는 몇 년 동안 HTML5 및 CSS 사양에 웹 폰트, 플렉스 박스, svg 및 기타 다양한 추가를 사용한 사이트를 렌더링하는 데 문제가 있다는 것입니다.
서드파티 서비스를 몇 가지 시도해 봤는데, 대부분이 팬텀을 기반으로 합니다.JS. 즉, 품질이 낮은 스크린샷도 생성합니다.웹 사이트 스크린샷을 생성하기 위한 최고의 서드파티 서비스는 urlbox.io입니다.유료 서비스입니다만, 유료 플랜을 이용하지 않고 7일간의 무료 체험판을 이용하실 수 있습니다.
다음은 설명서에 대한 링크이며, 아래는 작성자와 함께 PHP에서 작동하기 위한 간단한 단계입니다.
// 1 . Get the urlbox/screenshots composer package (on command line):
composer require urlbox/screenshots
// 2. Set up the composer package with Urlbox API credentials:
$urlbox = UrlboxRenderer::fromCredentials('API_KEY', 'API_SECRET');
// 3. Set your options (all options such as full page/full height screenshots, retina resolution, viewport dimensions, thumbnail width etc can be set here. See the docs for more.)
$options['url'] = 'example.com';
// 4. Generate the Urlbox url
$urlboxUrl = $urlbox->generateUrl($options);
// $urlboxUrl is now 'https://api.urlbox.io/v1/API_KEY/TOKEN/png?url=example.com'
// 5. Now stick it in an img tag, when the image is loaded in browser, the API call to urlbox will be triggered and a nice PNG screenshot will be generated!
<img src="$urlboxUrl" />
예를 들어, 바로 이 페이지의 풀 하이트 스크린샷입니다.
Windows에 있기 때문에 Stephan의 힌트를 읽고 이미지 그래브윈도 기능을 사용할 수 있었습니다.자르기(브라우저 헤더, 스크롤바 등을 없애기 위해)와 크기를 변경하여 최종 이미지를 얻습니다.제 암호는 이렇습니다.그게 도움이 됐으면 좋겠어요.
나는 블루가 썼어.api를 사용하면 월 100장의 스냅숏을 유료화할 수 있지만, 1페이지에 1회 이상의 크레딧을 사용하는 경우도 있습니다.방금 drupal 모듈인 Bluga WebThumbs를 druppal 7로 업그레이드했습니다.이것은 템플릿이나 입력 필터로 섬네일을 인쇄할 수 있는 것입니다.
이 api를 사용하는 주된 장점은 적응형 css를 사용하는 경우 브라우저 치수를 지정할 수 있기 때문에 모바일 및 태블릿 레이아웃과 일반 레이아웃의 렌더링을 받을 수 있습니다.
다음 언어에 대한 API 클라이언트가 있습니다.
PHP, Python, Ruby, Java 등입니다.Net C#, Perl 및 Bash(셸 스크립트에 Perl이 필요한 것 같습니다)
모든 것은 당신이 스크린샷을 어떻게 찍느냐에 달려있다.
웹 서비스를 사용하여 이미지를 가져오면 PHP를 통해 이를 수행할 수 있습니다.
grabz.it 에는 이러한 기능만을 위한 웹 서비스가 있습니다.다음은 이 서비스의 간단한 사용 예를 보여 주는 기사입니다.
PHP에서 이를 실현하는 방법은 여러 가지가 있지만 현실적으로 PHP가 아닌 API에 위임하여 직접 빌드하거나 비용을 지불하는 것이 좋습니다.많은 사람들이 이미 답변에 스크린샷 API를 나열하고 있으며, 이를 위해 이러한 API 중 하나를 사용할 수 있습니다.내 스크린샷 API는 매우 잘 테스트되었고 대부분의 API에서 다루지 않는 렌더링 사례를 다루고 있습니다. 하지만 대부분의 사람들에게 이것은 솔직히 오버킬입니다.
현재 스크린샷 솔루션을 구축하기 위한 표준 솔루션인 Puppeteer를 사용하여 자체 API를 구축하는 것이 좋습니다.이 서비스는 Puppeteer를 기반으로 구축되어 있으며, 대부분의 기본적인 사용 사례에 매우 적합합니다.
AWS 또는 GCP에서 서버 없는 Puppeteer 솔루션을 구축할 수 있습니다. https://www.npmjs.com/package/chrome-aws-lambda,은 Chromium과 함께 제공되는 Puppeteer를 위한 뛰어난 서버 없는 패키지입니다.
https://grabz.it 솔루션을 사용할 수 있습니다.
매우 유연한 PHP API를 갖추고 있으며 cronjob이나 PHP 웹 페이지 등 다양한 방법으로 호출할 수 있습니다.
구현하려면 먼저 앱 키와 비밀 정보를 얻고 (무료) SDK를 다운로드해야 합니다.
또, 실장의 예도 있습니다.우선 초기화:
include("GrabzItClient.class.php");
// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" with the values from your account!
$grabzIt = new GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret");
스크린샷의 예:
// To take a image screenshot
$grabzIt->URLToImage("http://www.google.com");
// Or to take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");
// Or to convert online videos into animated GIF's
$grabzIt->URLToAnimation("http://www.example.com/video.avi");
// Or to capture table(s)
$grabzIt->URLToTable("http://www.google.com");
다음은 절약입니다.두 가지 저장 방법 중 하나를 사용할 수 있습니다.Save
콜백 핸들(공중이 액세스 가능한 경우)과SaveTo
아니라면.상세한 것에 대하여는, 메뉴얼을 참조해 주세요.
웹서핑을 많이 하다가 이걸 발견했어요.
PPTRAAS > URL을 파라미터로 전달하여 스크린샷을 캡처하는 무료 툴
URL을 누르기만 하면 여러 가지 옵션이 제공됩니다.
전체 페이지 스크린샷 가져오기
특정 크기의 페이지 스크린샷 가져오기
https://pptraas.com/screenshot?url={YOU URL HERE}&size=400,400
페이지를 PDF로 변환할 수도 있습니다.
직접은 아니다.Selenium과 같은 소프트웨어에는 이와 같은 기능이 있으며 PHP에 의해 제어될 수 있지만 다른 종속 요소(스크린샷을 찍고 싶은 브라우저를 사용하여 컴퓨터에서 Java 기반 서버를 실행하는 등)가 있습니다.
cutycapt을 사용할 수 있습니다.
kwhtml은 권장되지 않으며 이전 브라우저와 마찬가지로 페이지를 표시합니다.
이 툴이 가장 쉽고 편리한 툴임을 알게 되었습니다.ScreenShotMachine(스크린샷머신)유료 서비스이지만 100장의 스크린샷을 무료로 받을 수 있고, 약 20달러에 2,000장을 더 살 수 있기 때문에 꽤 저렴합니다.매우 간단한 사용법이므로 URL만 사용하므로 이 스크립트를 사용하여 파일을 저장했습니다.
<?php
$url = file_get_contents("http://api.screenshotmachine.com/?key={mykey}&url=https://stackoverflow.com&size=X");
$file = fopen("snapshots/stack.jpg", "w+");
fwrite($file, $url);
fclose($file);
die("saved file!");
?>
여기 아주 좋은 문서가 있으니 꼭 봐주세요.
언급URL : https://stackoverflow.com/questions/757675/website-screenshots
'programing' 카테고리의 다른 글
ES6에 심볼을 도입하는 동기는 무엇입니까? (0) | 2023.01.30 |
---|---|
어레이 리스트에서 어레이로 (0) | 2023.01.20 |
spring-boot jpa 하이버네이션에서 4<24를 초과하면 DB로의 접속이 끊어진다. (0) | 2023.01.20 |
"new Object()"와 객체 리터럴 표기법의 차이점은 무엇입니까? (0) | 2023.01.20 |
& & 로직 및 | 로직테이블의 True와 False (0) | 2023.01.20 |