ウェブサイトのスクリーンショット


407

PHPでWebサイトのスクリーンショットを撮り、それをファイルに保存する方法はありますか?


2
ソリューションのドロップが必要な場合は、Usersnapをご覧ください。正確なWebサイトのスクリーンショットを提供する優れたサービスです。小さなJavaScriptスニペットをページに追加して機能させるだけです。
グレゴール

1
Usersnapは、Ajaxを使用してこのページのようなコンテンツを生成するWebページに対応できません。どうすればそれを達成できますか?たとえば、ページの初期読み込みが完了してから10秒後にスクリーンショットを作成します
rubo77

1
@ rubo77:Usersnapはそのような動的DOMをサポートしています。私はあなたのページで試しました-スクリーンショットは、すべての位置を含む正確な状況を再現しています。
グレゴール

回答:


280

最終編集:7年後も、この回答に対する賛成票はまだありますが、これははるかに正確になったと思います。


もちろん可能ですが、ページを何かでレンダリングする必要があります。本当にphpのみを使用したい場合は、ページをレンダリングしてpsファイル(ghostscript)に出力するHTMLTOPSをお勧めします。次に、.jpg、.png、.pdfに変換します。複雑なページ(すべてのCSSをサポートしているわけではありません)。

それ以外の場合は、wkhtmltopdfを使用してhtml、pdf、jpgなどのページを出力できます。CSS2.0を受け入れ、webkit(safariのラッパー)を使用してページをレンダリングします。これで問題ありません。サーバーにもインストールする必要があります。

更新今回、新しいHTML5およびJS機能により、JavaScriptを使用してページをキャンバスオブジェクトにレンダリングすることもできます。:それを行うためにここに素敵なライブラリHtml2Canvas、ここでは実装である G +のようなフィードバックを得るために、同じ作者による。domをキャンバスにレンダリングしたら、ajaxを介してサーバーに送信し、jpgとして保存できます。

編集:pdfをpngに変換するためにimagemagickツールを使用できます。私のバージョンのwkhtmltopdfは画像をサポートしていません。例えばconvert html.pdf -append html.png

編集この小さなシェルスクリプトは、php5-cliと上記のツールを使用したLinuxでの簡単な/しかし実用的な使用例を示しています。

編集:私は今、wkhtmltopdfチームが別のプロジェクトに取り組んでいることに気づきました:wkhtmltoimage、これは直接jpgを提供します


11
wkhtmltopdfの+1。私は他のいくつかのライブラリをいじってみましたが、それらのどれも、非常に基本的なHTMLとCSS以外のものをサポートすることすらできませんでした。wkhtmltopdfはSafariの機能をすべて実行できるので、安全です。
Wim、

7
wkhtmltoimageは素晴らしい働きをします!先端をありがとう。pngも出力します。
yuttadhammo '16年

2
今あなたはwkhtmltopdf KnpLabsがそれのためのラッパーを持っていると言及しましたgithub.com/KnpLabs/snappy
rmontagud

1
@rmontagud wkhtmltopdfの使用はかなり簡単ですが、OOPラッパーは常に優れています!
Strae

1
これらはすべて数年前の優れたソリューションでしたが、それらすべてがベースにしているブラウザー技術は、最新のHTML5 / CSS仕様に対応していません。webfonts、svg、canvas、flexboxなどを使用するサイトをレンダリングしている場合は、正確なスクリーンショットを取得してください。正確なスクリーンショットが必要な場合は、urlboxを使用した私の答えを確認してください
cjroebuck

87

PHP 5.2.2以降では、PHPのみでWebサイトをキャプチャすることが可能です!

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システムでのみ使用可能です。


26
本当にPHPだけではないのですか?
Toby Allen

これは、Internet Explorerブラウザを使用してレンダリングを行っています。
keanu_reeves

55

サードパーティのツールを使用したくない場合は、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=mobileparamsでのモバイルサイトビューパスの場合、

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile

デモ


3
これはかなりクールで、APIキーを提供しなくても機能するようです。返された画像は壊れていますが、すべての「_」を「/」に、すべての「-」を「+」に置き換える必要があります。その後、それをデータURIとして追加できます
Robert Went

9
これは素晴らしいです。私はこれをgist.github.com/jaseclamp/d4ac6205db352e822ff6で
JaseC '17

21
参考までに、GoogleのPage Insight APIはサードパーティのツールです。
神保

1
スクリーンショットの解像度は320x240に制限されており、親指のようなものです
ガブリエレF.

1
本当にすごい!使用に制限がありますか?
moreirapontocom

19

PhantomJSのようなシンプルなヘッドレスブラウザーを使用してページを取得できます。

また、PHPでPhantomJSを使用できます。

これを行うこの小さなphpスクリプトを確認してください。こちらをご覧くださいhttps://github.com/microweber/screen

そして、これがAPI- http://screen.microweber.com/shot.php?url=/programming/757675/website-screenshots-using-php


通常、PhantomJSはこれに最適なソリューションですが、私がこの目的に使用した場合、すべてのHTMLインターフェイス要素が適切にレンダリングされるわけではありません。
ultrageek

2
screen.microweber.com/shot.php?url=https://stackoverflow.com/…は404になり、ここで回答を削除する必要があるかどうか疑問に思っています。どちらの場合も、更新する必要があります。
Funk Forty Niner、2018年

18

これはあなたにとって良いはずです:

https://wkhtmltopdf.org/

wkhtmltoimageディストリビューションをダウンロードしてください!


1
ところで、apt-getを使用するだけで、Ubuntu 10.04にインストールしました。しかし、私がそれを実行したとき、それは非常に遅く、PDFレイアウトは斜めであり、実際に実行可能なオプションではありませんでした。ただし、最終的には画像生成のために、この方法でKHTMLを使用することが約束されています。
Volomike、2011

@Volomike-ご存知のように、標準に準拠したブラウザが使用されているため、これ以上の結果は得られません。スピードに関しては、私が協力している会社は、きめ細かい(しかし小さな)CSSプロジェクトを必要とするその他のプロジェクトで繰り返し使用しています。
クリスチャン

この製品の効能を保証できます。私はhtml / cssを介して配信されますがPDFとしてアーカイブする必要がある政府クライアント向けのチャートアプリケーションを開発しています。他のweb-to-pdf製品は、wkhtmltopdfとほぼ同じようにチャートを完全に再現しませんでした。
Daniel Szabo

@Volomike:通常、リポジトリのバージョンは最新のものではありません。ソースから最新の安定したバージョンをインストールすると、古いバージョンの多くの癖が修正されました。
Piskvorがビルを去った

10

はい。あなたはいくつかのものが必要になります:

* nxのkhtmld(aemon)を参照してください。Windows用のUrl2Jpgを参照してくださいが、それはdotNetアプリなので、Url2Bmpもチェックする必要があります

どちらも、スクリーンショットを取得するためにWebアプリから利用できるコンソールツールです。

それを提供するWebサービスもあります。たとえばこれをチェックてください。

編集:

このリンクは役に立ちます。


10

これはPythonにありますが、ドキュメントとコードを確認すると、これがどのように行われるかを正確に確認できます。Pythonを実行できる場合、これは既製のソリューションです。

http://browsershots.org/

すべてが1つのプラットフォームの1台のマシン、または他のプラットフォームを実行する仮想マシンを備えた1台のマシンで実行できることに注意してください。

無料のオープンソース。ページの一番下までスクロールして、ドキュメント、ソースコード、その他の情報へのリンクを確認してください。


24
ルール37:やり過ぎはありません。「直火」と「リロードの時間」しかない。
アダムデイビス

ソースコードは、レンダリングのためにデスクトップブラウザを起動します。スレッドセーフではなく、ロックアップする可能性があります。
Volomike、2011

@Volomike-正しいですが、ブラウザで実行したときにページがどのように表示されるかを確認する必要がある場合、それ以上の選択肢はほとんどありません。HTMLレンダリングエンジンは、今日のJavaScriptのヘビーページでしか機能しません。適切な実行権限とタイムアウトを設定すると、外部プログラムを実行する際の問題とリスクが制限されます。
アダムデイビス


5

まあ、PhantomJSはサーバーに簡単に配置してphpに統合できるブラウザーです。コードはWDudesにあります。画像サイズの指定、キャッシュ、ファイルとしてのダウンロード、img srcでの表示など、多くの機能が含まれています。

<img src=”screenshot.php?url=google.com” />

URLパラメータ

  • 幅と高さ:screenshot.php?url = google.com&w = 1000&h = 800

  • トリミングあり:screenshot.php?url = google.com&w = 1000&h = 800&clipw = 800&cliph = 600

  • キャッシュを無効にして、新しいscreesnhotをロードします:
    screenshot.php?url = google.com&cache = 0

  • 画像をダウンロードするには:screenshot.php?url = google.com&download = true

こちらのチュートリアルをご覧ください:APIを使用せずにPHPを使用してWebサイトのスクリーンショットをキャプチャ


ああ。申し訳ありません。ブログはもうないようです。試してみてくださいgithub.com/graphcool/chromeless @NarendraVermaを
Gijo Varghese

4

cutycaptは、ほとんどの画像形式(jpg、png ..)でWebページを保存します。シナプスからダウンロードします。wkhtmltopdfよりもはるかにうまく機能します



3

@boksioraによって提案されたように、私は最終的にmicroweber / screenを使用して設定しました。
最初にここで言及したリンクを試してみると、私が得たもの:

Please download this script from here https://github.com/microweber/screen

私は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ます。あなたが見たときのスクリーンショットを、あなたが行われています。より高度な設定についての議論はここここで利用できます


3

スクリーンショットを生成できる多くのオープンソースプロジェクトがあります。たとえば、PhantomJS、webkit2pngなど

これらのプロジェクトの大きな問題は、古いブラウザテクノロジーに基づいており、多くのサイト、特にwebfonts、flexbox、svg、およびここ数か月/年にわたってHTML5とCSS仕様へのその他のさまざまな追加を使用するサイトのレンダリングに問題があることです。

私はいくつかのサードパーティのサービスを試しましたが、ほとんどはPhantomJSに基づいています。ウェブサイトのスクリーンショットを生成するための最良のサードパーティサービスは、urlbox.ioです。です。これは有料サービスですが、有料プランを確約せずにテストできる無料の7日間トライアルがあります。

ここにドキュメントへのリンクがあります。以下は、PHPでcomposerを使用するための簡単な手順です。

// 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" />

たとえば、このページの高さ全体のスクリーンショットは次のとおりです。

https://api.urlbox.io/v1/ca482d7e-9417-4569-90fe-80f7c5e1c781/8f1666d1f4195b1cb84ffa5f992ee18992a2b35e/png?url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2Fsite-screen-shot%F2f75screenphp%2 2F43652083%2343652083&full_page = true

urlbox.ioによるstackoverflow.com質問の全ページのスクリーンショット


3

多くのオプションがあり、それらはすべて長所と短所があります。以下は、実装の難易度順に並べられたオプションのリストです。

オプション1:APIを使用する(最も簡単)

長所

  • Javascriptを実行する
  • ほぼ完璧なレンダリング
  • キャッシュオプションを正しく使用すると高速
  • スケールはAPIによって処理されます
  • 正確なタイミング、ビューポート、...
  • ほとんどの場合、彼らは無料プランを提供しています

短所

  • たくさん使うつもりなら無料ではない

オプション2:利用可能な多数のライブラリの1つを使用する

長所

  • ほとんどの場合、変換はかなり高速です

短所

  • 悪いレンダリング
  • JavaScriptを実行しません
  • 最近のWeb機能(FlexBox、高度なセレクター、Webフォント、ボックスサイジング、メディアクエリ、HTML5タグなど)はサポートされていません。
  • インストールが簡単ではない場合があります
  • スケールが複雑

オプション3:PhantomJsとラッパーライブラリを使用する

長所

  • Javascriptを実行する
  • かなり速いです

短所

  • 悪いレンダリング
  • PhantomJsは非推奨になり、もう保守されていません。
  • 最近のWeb機能(FlexBox、高度なセレクター、Webフォント、ボックスサイジング、メディアクエリ、HTML5タグなど)はサポートされていません。
  • スケールが複雑
  • ロードする画像がある場合、動作させるのはそれほど簡単ではありません...

オプション4:Chromeヘッドレスとラッパーライブラリを使用する

長所

  • Javascriptを実行する
  • ほぼ完璧なレンダリング

短所

  • 次の点に関して希望どおりの結果を得るのは簡単ではありません。
    • ページ読み込みタイミング
    • プロキシ統合
    • 自動スクロール
    • ...
  • スケールが複雑
  • htmlに外部リンクが含まれている場合、かなり遅く、さらに遅くなる

免責事項:私はApiFlashの創設者です。私は正直で役立つ答えを提供するために最善を尽くしました。


2

私はWindowsを使用しているので、stephanからのヒントを読んだ後、imagegrabwindow関数を使用することができました。最終的な画像を取得するために、クロッピング(ブラウザのヘッダー、スクロールバーなどを取り除くため)とサイズ変更を追加しました。これが私のコードです。それが誰かを助けることを願っています。


1

webkit2htmlはMac OS XとLinuxで動作し、インストールと使用が非常に簡単です。このチュートリアルを参照してください

Windowsでは、同様の機能を持つCutyCaptを使用できます。


2
@Smith:前回チェックしたとき、CutyCaptはインストーラーにすべての依存関係を持っています。はい、おそらくこれを制限されたアカウントでインストールすることはできませんが、それは人生です。他のすべてのソリューションは、レンダリングコアの周りにある種のラッパーを使用しているため、それらと同じ場所にいることに注意してください。
Piskvorがビルを去った2011

1

ブルーガを使用しました。このAPIを使用すると、1か月あたり100枚のスナップショットを無料で取得できますが、1つのページに複数のクレジットを使用する場合もあります。drupalモジュールのBluga WebThumbsをdrupal 7にアップグレードしました。テンプレートまたは入力フィルターでサムネイルを印刷できます。

このAPIを使用する主な利点は、適応型CSSを使用する場合にブラウザーのサイズを指定できることです。そのため、これを使用して、通常のレイアウトだけでなく、モバイルおよびタブレットのレイアウトのレンダリングを取得します。

次の言語のAPIクライアントがあります。

PHPPythonRubyJava.Net C#Perl およびBash(シェルスクリプトはperlを必要とするように見えます)


1

それはすべて、スクリーンショットを撮る方法によって異なります。

PHPを介してこれを行うことができ、Webサービスを使用して画像を取得します

grabz.itには、これを行うためのWebサービスがあります。サービスを使用する簡単な例を示す記事を次に示します。

http://www.phpbuilder.com/articles/news-reviews/miscellaneous/capture-screenshots-in-php-with-grabzit-120524022959.html


1

https://grabz.itソリューションを使用できます。

これは非常に柔軟なPHP APIを備えており、cronjobやPHP Webページからなど、さまざまな方法で呼び出すことができます。

これを実装するには、まずアプリのキーとシークレットを取得し、(無料の)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場合とそうでない場合、2つのsaveメソッドのいずれかを使用できます。詳細については、ドキュメントを確認してください


全ページのスクリーンショットを探している場合、このプロバイダーにはProfessional($ 170 /年)サブスクリプションが必要です。
chaoskreator

1

先日、Google APIを使用してこれを行うための迅速で汚れたアプリを書きました。間違いなく改善の余地があります...

  • 最新のGoogle API ver 5を使用しています。
  • 幅500pxの画像サイズ
  • デスクトップおよびモバイルビューをサポート
  • 指定したフォルダのファイルに保存します
  • 初歩的なキャッシュシステムを組み込む

ライブデモとコードを使用して、ここで見つけてください。

ここではコードを投稿しませんでした。コードを改良し続けたので、時間があれば、適切なクラスに変換したいと考えています。


0

私はpage2imagesを使用しました。それは本当に高速で安定しているキューティキャプに基づいて開発されました。パフォーマンスと構成にあまり時間をかけたくない場合は、それを使用する必要があります。彼らのウェブサイトにアクセスすると、詳細とサンプルのPHPコードを見つけることができます。


0

ウェブでのサーフィンのためにたくさん見つけた後、私はこれを見つけました。

PPTRAAS > URLをパラメーターとして渡してスクリーンショットをキャプチャする無料ツール

URLを押すだけで複数のオプションが提供されます。

  1. ページ全体のスクリーンショットを取得

    https://pptraas.com/screenshot?url= {ここにあなたのURL}

  2. 特定のサイズのページのスクリーンショットを取得する

    https://pptraas.com/screenshot?url= {YOU URL HERE}&size = 400,400

  3. ページをPDFに変換することもできます

    https://pptraas.com/pdf?url= {ここにあなたのURL}


ジョシュ、私が答えをアップロードしたとき、それはうまく機能するために使用します。このURLに依存することはできないと思います。今のところサービスを停止している可能性があるため、別の代替案を見つけてください
Fenil Shah

0

2つのことができます。

操り人形師を使う

PHP Puppeteerパッケージを使用して、ブラウザーを起動し、スクリーンショットを撮ることができます。

APIを使用する

スクリーンショットAPIはたくさんあります。たとえば、ScreenshotAPI.netを見ることができます。(免責事項私はそのAPIの作成者です)


-1

直接ではありません。Seleniumなどのソフトウェアにはこのような機能があり、PHPで制御できますが、他の依存関係があります(スクリーンショットを作成したいブラウザーを備えたコンピューターでJavaベースのサーバーを実行するなど)


現在、多くのPHPライブラリが利用可能です。正確には「PHP」ライブラリではありません。いくつかのjsブラウザーとコードが含まれます。
Gijo Varghese、2016年

-1

あなたはcutycaptを使用することができます。

kwhtmlは非推奨で、古いブラウザのようなページを表示します。


-1

私はこれが周りの最良かつ最も簡単なツールであることがわかりました:ScreenShotMachine。これは有料サービスですが、100枚の無料のスクリーンショットを取得し、さらに2,000ドルを(約)$ 20で購入できるので、かなりお得です。使い方は非常に簡単で、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!");
?>

ここには非常に優れたドキュメントあるので、ぜひご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.