网站截图
有什么办法在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
这是在Python中,但通过文档和代码,你可以看到如何做到这一点。 如果你可以运行python,那么这是一个现成的解决scheme:
请注意,一切可以运行在一台平台上的一台机器上,或者一台运行其他平台的虚拟机上运行。
免费,开放源代码,滚动到页面底部,链接到文档,源代码和其他信息。
是。 你需要一些东西:
请参阅* 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 =真
我在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服务来做到这一点,这里有一篇文章展示了一个简单的使用服务的例子。
不直接。 像Selenium这样的软件具有这样的function,可以通过PHP控制,但有其他依赖(如在计算机上运行他们的基于Java的服务器与您要截图的浏览器)
我用page2images 。 它是基于真正快速和稳定的cutycapt开发的。 如果您不想在性能和configuration上花费太多时间,则应该使用它。 如果你去他们的网站,你可以find更多的细节和示例PHP代码。
你可以使用cutycapt。
kwhtml被弃用,像旧浏览器一样显示页面。
你可以使用https://grabz.it解决scheme。;
它有一个非常灵活的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
如果没有。 检查文档的细节 。