网站截图

有什么办法在PHP中采取一个网站的截图,然后将其保存到文件?

最后编辑 :7年后,我仍然得到upvote fot这个答案,但我想这一个现在更准确。


当然可以,但是你需要用某种东西来渲染页面。 如果你真的只想使用PHP,我build议你HTMLTOPS ,呈现页面,并输出在PS文件(ghostscript),然后,将其转换为.jpg,.png,.pdf ..可以慢一点复杂的网页(并不支持所有的CSS)。

否则,您可以使用wkhtmltopdf输出pdf,jpg,whaterver中的html页面。接受CSS2.0,使用webkit(safari的包装器)来渲染页面..所以应该罚款。 你必须在你的服务器上安装它。

更新现在,使用新的HTML5和JSfunction,也可以使用Javascript将页面呈现为canvas对象。 这里有一个很好的库来做到这一点: Html2Canvas 这里是由同一个作者得到一个像G +的反馈的实现 。 一旦你把dom渲染到canvas上,你可以通过ajax发送到服务器,并保存为jpg格式。

编辑 :您可以使用imagemagick工具来转换PDF到PNG。 我的wkhtmltopdf版本不支持图像。 例如convert html.pdf -append html.png

编辑 : 这个小的shell脚本给出了一个简单的/但在Linux上使用php5-cli和上述工具的使用示例。

编辑 :我现在注意到,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'); ?> 

编辑: 请注意,这些function只能在Windows系统上使用!

如果您不想使用任何第三方工具,我已经遇到了使用Google Page Insight API的简单解决scheme。

只需要用params screenshot=true来调用它就可以了。

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

对于手机网站查看传递&strategy=mobile params,

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

DEMO

您可以使用像PhantomJS这样简单的无头浏览器来抓取页面。

您也可以使用PhantomJS与PHP。

看看这个小php脚本这样做。 看看这里https://github.com/microweber/screen

这里是API- http://screen.microweber.com/shot.php?url=https://stackoverflow.com/questions/757675/website-screenshots-using-php

这应该对你有好处:

http://code.google.com/p/wkhtmltopdf/

确保你下载的wkhtmltoimage分布!

这是在Python中,但通过文档和代码,你可以看到如何做到这一点。 如果你可以运行python,那么这是一个现成的解决scheme:

http://browsershots.org/

请注意,一切可以运行在一台平台上的一台机器上,或者一台运行其他平台的虚拟机上运行。

免费,开放源代码,滚动到页面底部,链接到文档,源代码和其他信息。

是。 你需要一些东西:

请参阅* nx上的khtmld(aemon) 。 看到Url2Jpg的Windows,但由于它是dotNet应用程序,你应该也chek Url2Bmp

这两个控制台工具,你可以利用你的networking应用程序来获取屏幕截图。

也有提供它的Web服务。 检查这个例子。

编辑:

这个链接是有用的。

是的。 如果你只需要URL的图片,请尝试这个

 <img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'> 

通过url作为参数,你会得到更多的细节图像检查这个链接http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html

cutycapt保存网页到大多数图像格式(JPG,PNG)从你的突触下载,它比wkhtmltopdf

我总是使用microweber屏幕捕捉任何网页的截图。 在这里,我们可以find一个很好的教程 。 这很容易,不应该超过3分钟学习。

那么,PhantomJS是一个浏览器,可以很容易地放在服务器上,并将其集成到PHP。 您可以在WDudes中find代码。 他们已经包括了更多的function,如指定图像大小,caching,下载作为一个文件或显示在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

  • 禁用caching并加载新鲜的screesnhot:
    screenshot.php?URL = google.com和caching= 0

  • 要下载图像:screenshot.php?url = google.com&download = true

你可以在这里看到这个教程: 使用没有API的PHP捕获一个网站的屏幕截图

我最后用@boksiorabuild议使用microweber / screen 。
最初,当试图在这里提到的链接我得到了什么:

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

我在Linux上。 所以如果你想运行它,你可以调整我的步骤跟随你的环境。
以下是我在我的shell 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 。 当你看到截图时 ,你就完成了。 讨论更多的高级设置可在这里这里

有许多开源项目可以生成截图。 例如PhantomJS,webkit2png等

这些项目的一个大问题是,它们基于较旧的浏览器技术,并且在过去几个月/几年中呈现多个站点,特别是使用webfonts,flexbox,svg和各种其他HTML5和CSS规范的站点时遇到问题。

我尝试了一些第三方服务,大部分都是基于PhantomJS,这意味着它们也会产生质量差的屏幕截图。 生成网站截图的最佳第三方服务是urlbox.io 。 这是一项有偿服务,虽然有7天的免费试用期,但无需付费。

这是一个链接到文档 ,下面是简单的步骤,让它与PHPcomposer 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" /> 

例如,下面是这个页面的完整高度截图:

https://api.urlbox.io/v1/ca482d7e-9417-4569-90fe-80f7c5e1c781/8f1666d1f4195b1cb84ffa5f992ee18992a2b35e/png?url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F757675%2Fwebsite-screenshots-using-php% 2F43652083%2343652083&full_page =真

由urlbox.io提供的关于stackoverflow.com的问题

我在Windows上,所以我可以在stephan阅读这里的提示后使用imagegrabwindowfunction。 我添加了裁剪(摆脱浏览器标题,滚动条等)和resize,以获得最终的形象。 这是我的代码 。 希望能帮助别人。

webkit2html适用于Mac OS X和Linux,安装和使用起来相当简单。 看到这个教程 。

对于Windows,您可以使用具有类似function的CutyCapt 。

我用bluga 。 api允许您每月拍摄100张快照而无需付费,但有时会使用1张以上的function。 我刚刚完成升级一个Drupal模块, Bluga WebThumbs到Drupal 7,它允许您在模板或inputfilter中打印缩略图。

使用这个api的主要优点是,它允许你指定浏览器的尺寸,以防你使用自适应CSS,所以我使用它来获得移动和平板电脑布局以及普通的渲染。

有以下语言的api客户端:

PHP , Python , Ruby , Java , .Net C# , Perl和Bash (shell脚本看起来像是需要perl)

这一切都取决于你想如何截图。

你可以通过PHP来做到这一点,使用web服务来获取图像

grabz.it有一个web服务来做到这一点,这里有一篇文章展示了一个简单的使用服务的例子。

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

不直接。 像Selenium这样的软件具有这样的function,可以通过PHP控制,但有其他依赖(如在计算机上运行他们的基于Java的服务器与您要截图的浏览器)

我用page2images 。 它是基于真正快速和稳定的cutycapt开发的。 如果您不想在性能和configuration上花费太多时间,则应该使用它。 如果你去他们的网站,你可以find更多的细节和示例PHP代码。

你可以使用cutycapt。

kwhtml被弃用,像旧浏览器一样显示页面。

你可以使用https://grabz.it解决scheme&#x3002;

它有一个非常灵活的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.You可以使用两种保存方法之一, Save如果可公开访问的callback句柄可用和SaveTo如果没有。 检查文档的细节 。