网站截图

2022-08-30 05:54:35

有没有办法在PHP中截取网站的屏幕截图,然后将其保存到文件中?


答案 1

最后编辑:7年后,我仍然得到这个答案的赞成票,但我想这个现在更准确了。


当然可以,但您需要使用某些内容来呈现页面。如果你真的只想使用php,我建议你使用HTMLTOPS,它呈现页面并将其输出到ps文件(ghostscript)中,然后,将其转换为.jpg,.png.pdf。对于复杂的页面,速度可能会慢一些(并且不支持所有的CSS)。

否则,您可以使用wkhtmltopdf以pdf,jpg,其他任何形式输出html页面。接受CSS2.0,使用webkit(safari的包装器)来呈现页面。所以应该没问题。您还必须将其安装在服务器上。

更新现在,借助新的HTML5和JS功能,还可以使用JavaScript将页面呈现为画布对象。这里有一个很好的库可以做到这一点:Html2Canvas这是同一作者的实现,以获得像G +这样的反馈。将 dom 渲染到画布中后,可以通过 ajax 发送到服务器并将其另存为 jpg。

编辑:您可以使用图像魔术工具将pdf转换为png。我的wkhtmltopdf版本不支持图像。例如.convert html.pdf -append html.png

编辑这个小的shell脚本给出了一个简单/但工作的示例,在linux上使用php5-cli和上面提到的工具。

编辑:我现在注意到wkhtmltopdf团队正在研究另一个项目:wkhtmltoimage,直接给你jpg


答案 2

从 PHP 5.2.2 开始,可以只用 PHP 捕获网站

图像抓取屏幕 — 捕获整个屏幕

<?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系统上可用!


推荐