有什么方法可以用PHP截图一个网站,然后保存到一个文件?
当前回答
你可以使用剪贴画。
KWHTML已弃用,像旧浏览器一样显示页面。
其他回答
您可以使用https://grabz.it解决方案。
它有一个非常灵活的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");
其次是储蓄。你可以使用两个保存方法之一,保存如果公共可访问的回调句柄可用,SaveTo如果没有。详细信息请查看文档。
我在Windows上,所以我能够使用imagegrabwindow函数在阅读stephan在这里的提示后。我添加了裁剪(以消除浏览器标题、滚动条等)和调整大小以获得最终图像。这是我的代码。希望这能帮助到别人。
自从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。
好吧,PhantomJS是一个可以很容易地放在服务器上并与php集成的浏览器。您可以在WDudes中找到代码。他们包括了更多的功能,如指定图像大小,缓存,下载为文件或显示在img src等。
<img src=”screenshot.php?url=google.com” />
URL参数
宽度和高度:截图.php?url=google.com&w=1000&h=800 裁剪: screenshot.php ? url = google.com&w = 1000 h = 800 &clipw = 800 &cliph = 600 关闭缓存并加载新截屏: screenshot.php ? url = google.com&cache = 0 下载图片:screenshot.php?url=google.com&download=true
你可以在这里看到教程:使用PHP不带API抓取一个网站的截图
推荐文章
- 阻止人们入侵基于php的Flash游戏高分表的最佳方法是什么
- PHP子字符串提取。获取第一个'/'之前的字符串或整个字符串
- __construct函数的作用是什么?
- PHP中的异步shell执行器
- Laravel 5 -如何访问在视图存储上传的图像?
- 为什么在PHP中使用sprintf函数?
- “质量分配”在Laravel中是什么意思?
- 在逗号上爆炸字符串,并修剪每个值的潜在空格
- PHP与MySQL 8.0+错误:服务器请求身份验证方法未知的客户端
- laravel5“LIKE”对等物(雄辩的)
- 在函数中使用默认实参
- 转换php数组到Javascript
- PHP PDO:字符集,集名称?
- PHP函数生成slug (URL字符串)
- GCM与PHP(谷歌云消息传递)