有什么方法可以用PHP截图一个网站,然后保存到一个文件?
当前回答
有很多选择,它们都有各自的优点和缺点。以下是按实现难度排序的选项列表。
选项1:使用API(最简单)
ApiFlash(基于chrome) EvoPDF(有html选项) Grabzit ...
Pros
执行Javascript 近乎完美渲染 正确使用缓存选项时快速 缩放由api处理 精确计时,视口,… 大多数时候,他们提供的是免费方案
Cons
如果你打算经常使用它们,就不是免费的
选项2:使用众多可用库中的一个
dom-to-image Wkhtmltoimage(包含在wkhtmltopdf工具中) phpwkhtmltopdf ...
Pros
大多数时候,转换是相当快的
Cons
坏的呈现 不执行javascript 不支持最近的网页功能(FlexBox,高级选择器,网页字体,盒子大小,媒体查询,HTML5标签…) 有时不容易安装 缩放复杂
选项3:使用PhantomJs和包装器库
PhantomJs php- PhantomJs (phphtomjs包装器库) ...
Pros
执行Javascript 很快
Cons
坏的呈现 PhantomJs已弃用,不再维护。 不支持最近的网页功能(FlexBox,高级选择器,网页字体,盒子大小,媒体查询,HTML5标签…) 缩放复杂 不那么容易使它工作,如果有图像要加载…
选项4:使用Chrome Headless和一个包装器库
Chrome无头 chrome-devtools-protocol puphpeteer ...
Pros
执行Javascript 近乎完美渲染
Cons
要得到想要的结果并不容易: 页面加载时间 代理集成 自动滚动 ... 缩放复杂 相当慢,甚至更慢,如果html包含外部链接
免责声明:我是ApiFlash的创始人。我尽力提供了一个诚实而有用的答案。
其他回答
Cutycapt保存网页的大多数图像格式(jpg,png..)下载它从你的突触,它比wkhtmltopdf工作得更好
这完全取决于你想如何截屏。
你可以通过PHP,使用webservice来获取图像
grabz。它有一个webservice来做这件事,这里有一篇文章展示了一个使用该服务的简单示例。
http://www.phpbuilder.com/articles/news-reviews/miscellaneous/capture-screenshots-in-php-with-grabzit-120524022959.html
我用的是bluga。该api允许你每月免费拍摄100张快照,但有时它会为单个页面使用超过1个积分。我刚刚升级了drupal模块,Bluga WebThumbs到drupal7,它允许你在模板或输入过滤器中打印缩略图。
使用这个api的主要优点是,它允许你指定浏览器尺寸,以防你使用自适应css,所以我使用它来获得移动和平板电脑布局以及常规布局的渲染。
有以下语言的api客户端:
PHP, Python, 红宝石, Java, net c#, Perl 和Bash (shell脚本看起来需要perl)
好吧,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抓取一个网站的截图
有很多选择,它们都有各自的优点和缺点。以下是按实现难度排序的选项列表。
选项1:使用API(最简单)
ApiFlash(基于chrome) EvoPDF(有html选项) Grabzit ...
Pros
执行Javascript 近乎完美渲染 正确使用缓存选项时快速 缩放由api处理 精确计时,视口,… 大多数时候,他们提供的是免费方案
Cons
如果你打算经常使用它们,就不是免费的
选项2:使用众多可用库中的一个
dom-to-image Wkhtmltoimage(包含在wkhtmltopdf工具中) phpwkhtmltopdf ...
Pros
大多数时候,转换是相当快的
Cons
坏的呈现 不执行javascript 不支持最近的网页功能(FlexBox,高级选择器,网页字体,盒子大小,媒体查询,HTML5标签…) 有时不容易安装 缩放复杂
选项3:使用PhantomJs和包装器库
PhantomJs php- PhantomJs (phphtomjs包装器库) ...
Pros
执行Javascript 很快
Cons
坏的呈现 PhantomJs已弃用,不再维护。 不支持最近的网页功能(FlexBox,高级选择器,网页字体,盒子大小,媒体查询,HTML5标签…) 缩放复杂 不那么容易使它工作,如果有图像要加载…
选项4:使用Chrome Headless和一个包装器库
Chrome无头 chrome-devtools-protocol puphpeteer ...
Pros
执行Javascript 近乎完美渲染
Cons
要得到想要的结果并不容易: 页面加载时间 代理集成 自动滚动 ... 缩放复杂 相当慢,甚至更慢,如果html包含外部链接
免责声明:我是ApiFlash的创始人。我尽力提供了一个诚实而有用的答案。
推荐文章
- 阻止人们入侵基于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(谷歌云消息传递)