有什么方法可以用PHP截图一个网站,然后保存到一个文件?
当前回答
有一些方法可以在PHP中实现这一点,但实际上,最好将其委托给非基于PHP的API,您可以自己构建,也可以付费购买。许多人已经在答案中列出了截图api,你可以使用其中任何一个来实现这一点。我自己的截图API经过了非常好的测试,涵盖了大多数API没有涵盖的许多渲染情况,但对大多数人来说,这是多余的,老实说。
我的建议是使用Puppeteer构建自己的API,这是目前构建截图解决方案的规范解决方案。我的服务是建立在Puppeteer的基础上的,对于大多数基本的用例来说,它真的工作得很好。
您可以使用https://www.npmjs.com/package/chrome-aws-lambda之类的东西在AWS或GCP上构建一个无服务器的Puppeteer解决方案,这是一个优秀的无服务器Puppeteer包,它预装了Chromium。
其他回答
不直接。像Selenium这样的软件有这样的特性,可以用PHP控制,但有其他依赖(比如在你想要截图的浏览器的计算机上运行基于java的服务器)
最后编辑:7年过去了,这个答案仍然得到了点赞,但我猜这个答案现在更准确了。
当然可以,但是您需要用一些东西来呈现页面。 如果你真的只想使用php,我建议你使用HTMLTOPS,它会渲染页面并将其输出到ps文件(ghostscript)中,然后将其转换为.jpg, .png, .pdf…对于复杂的页面可能会稍微慢一些(并且不支持所有的CSS)。
否则,你可以使用wkhtmltopdf输出一个html页面在pdf, jpg,无论什么。 接受CSS2.0,使用webkit (safari的包装器)来呈现页面。所以应该没问题。 你必须安装在你的服务器上,以及..
现在,有了新的HTML5和JS特性,也可以使用JavaScript将页面渲染成画布对象。这里有一个很好的库可以做到这一点:Html2Canvas,这里是由同一作者实现的,以获得类似G+的反馈。 一旦将dom渲染到画布中,就可以通过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');
?>
编辑:注意,这些功能只在Windows系统上可用!
有一些方法可以在PHP中实现这一点,但实际上,最好将其委托给非基于PHP的API,您可以自己构建,也可以付费购买。许多人已经在答案中列出了截图api,你可以使用其中任何一个来实现这一点。我自己的截图API经过了非常好的测试,涵盖了大多数API没有涵盖的许多渲染情况,但对大多数人来说,这是多余的,老实说。
我的建议是使用Puppeteer构建自己的API,这是目前构建截图解决方案的规范解决方案。我的服务是建立在Puppeteer的基础上的,对于大多数基本的用例来说,它真的工作得很好。
您可以使用https://www.npmjs.com/package/chrome-aws-lambda之类的东西在AWS或GCP上构建一个无服务器的Puppeteer解决方案,这是一个优秀的无服务器Puppeteer包,它预装了Chromium。
在网上冲浪了很多之后,我发现了这个。
PPTRAAS >一个免费的工具,通过传递你的URL作为参数来捕捉屏幕截图
它们提供了多种选择,只需点击URL即可。
获取全页截图 https://pptraas.com/screenshot?url={YOU URL HERE} 获取特定大小的页面截图 https://pptraas.com/screenshot?url={YOU URL HERE}&size=400,400 用户甚至可以将页面转换为pdf格式 https://pptraas.com/pdf?url={YOU URL HERE}
推荐文章
- 原则-如何打印出真正的sql,而不仅仅是准备好的语句?
- 如何从关联PHP数组中获得第一项?
- PHP/MySQL插入一行然后获取id
- 我如何排序一个多维数组在PHP
- 如何在PHP中截断字符串最接近于一定数量的字符?
- PHP错误:“zip扩展名和unzip命令都没有,跳过。”
- Nginx提供下载。php文件,而不是执行它们
- Json_encode()转义正斜杠
- 如何在PHP中捕获cURL错误
- 如何要求一个分叉与作曲家?
- 如何在php中创建可选参数?
- 在文本文件中创建或写入/追加
- 为什么PHP的json_encode函数转换UTF-8字符串为十六进制实体?
- 如何从一个查询插入多行使用雄辩/流利
- 在PHP单元测试执行期间,如何在CLI中输出?