网站截图

401 php screenshot

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

Str*_*rae 275

最后编辑时间:7年后,我仍然得到upvotes这个答案,但我想这一块现在更加精确.


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

否则,您可以使用wkhtmltopdf以pdf,jpg输出html页面,无论如何..接受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

  • 为wkhtmltopdf +1.我已经玩弄了其他一些库,但是它们都没有接近支持任何基本的HTML和CSS.wkhtmltopdf可以完成Safari所做的一切,所以你在那里非常安全. (11认同)
  • wkhtmltoimage非常棒!谢谢你的提示.输出png也是如此. (7认同)
  • 现在你提到wkhtmltopdf KnpLabs有一个包装器https://github.com/KnpLabs/snappy (2认同)

ste*_*han 87

从PHP 5.2.2 开始,用PHP捕获一个网站是可能的!

imagegrabscreen - 捕获整个屏幕

<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
Run Code Online (Sandbox Code Playgroud)

imagegrabwindow - 使用Windows句柄(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');
?>
Run Code Online (Sandbox Code Playgroud)

编辑:注意,这些功能仅在Windows系统上可用!

  • 不是真的只是PHP吗? (24认同)

Rik*_*esh 54

如果您不想使用任何第三方工具,我会遇到使用Google Page Insight api的简单解决方案.

只需要用params称它为api screenshot=true.

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
Run Code Online (Sandbox Code Playgroud)

对于移动站点视图传递&strategy=mobile参数,

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
Run Code Online (Sandbox Code Playgroud)

演示.

  • 因此,作为参考,Google的Page Insight API是第三方工具. (18认同)
  • 这太棒了.我已经在https://gist.github.com/jaseclamp/d4ac6205db352e822ff6编写了这个代码. (9认同)
  • 这非常酷,似乎无需提供api密钥即可使用.返回的图像虽然破了,但您需要将所有'_'替换为'/',将所有' - '替换为'+',然后您可以将其添加为数据uri (3认同)

bok*_*ora 19

您可以使用像PhantomJS这样的简单无头浏览器来抓取页面.

你也可以使用PhantomJS和PHP.

看看这个做这个的小PHP脚本.看看这里https://github.com/microweber/screen

以下是API- http://screen.microweber.com/shot.php?url=/sf/ask/53037281/

  • http://screen.microweber.com/shot.php?url=/sf/ask/53037281/现在是404,并且想知道是否应该删除此处的答案。无论哪种情况,都应进行更新。 (2认同)

Chr*_*ian 17

This ought to be good for you:

https://wkhtmltopdf.org/

Make sure you download the wkhtmltoimage distribution!


maj*_*tor 10

是.你需要一些东西:

请参阅*nx上的khtmld(aemon).请参阅Url2Jpg for Windows,但因为它是dotNet应用程序,所以你也应该知道Url2Bmp

两者都是可以从您的Web应用程序中获取屏幕截图的控制台工具.

还有提供它的Web服务.检查这个出来的例子.

编辑:

这个链接很有用.


Ada*_*vis 10

它是在Python中,但是通过文档和代码,您可以确切地看到它是如何完成的.如果你可以运行python,那么它是一个现成的解决方案:

http://browsershots.org/

请注意,一台机器可以在一台机器上运行,也可以在一台机器上运行其他平台运行虚拟机.

免费,开源,滚动到页面底部,以获取文档,源代码和其他信息的链接.

  • 规则37:没有矫枉过正.只有'开火','时间重装'. (24认同)

小智 5

是的.如果你只需要URL的图像试试这个

<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>
Run Code Online (Sandbox Code Playgroud)

将url作为参数传递,您将获得更多详细信息的图像,请查看此链接http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html

  • 该服务已停止。 (2认同)

Gij*_*ese 5

好吧,PhantomJS 是一个浏览器,可以很容易地放在服务器上并将其集成到 php 中。您可以在 WDudes 中找到代码。它们包含了更多功能,例如指定图像大小、缓存、下载为文件或在 img src 中显示等。

<img src=”screenshot.php?url=google.com” />
Run Code Online (Sandbox Code Playgroud)

网址参数

  • 宽高:screenshot.php?url=google.com&w=1000&h=800

  • 裁剪:screenshot.php?url=google.com&w=1000&h=800&clipw=800&cliph=600

  • 禁用缓存并加载新的 screesnhot:
    screenshot.php?url=google.com&cache=0

  • 下载图片:screenshot.php?url=google.com&download=true

您可以在此处查看教程:Capture Screenshot of a Website using PHP without API


Tim*_*nin 5

有很多选择,它们都有自己的优点和缺点。以下是按实施难度排序的选项列表。

选项 1:使用 API(最简单)

优点

  • 执行Javascript
  • 近乎完美的渲染
  • 正确使用缓存选项时速度快
  • 规模由 API 处理
  • 精确计时、视口、...
  • 大多数时候他们提供免费计划

缺点

  • 如果您打算大量使用它们,则不是免费的

选项 2:使用众多可用库之一

优点

  • 大多数时候转换速度相当快

缺点

  • 糟糕的渲染
  • 不执行javascript
  • 不支持最近的 Web 功能(FlexBox、高级选择器、Webfonts、Box Sizing、媒体查询、HTML5 标签...)
  • 有时不是那么容易安装
  • 规模复杂

选项 3:使用 PhantomJs 和包装库

优点

  • 执行Javascript
  • 蛮快

缺点

  • 糟糕的渲染
  • PhantomJs 已被弃用,不再维护。
  • 不支持最近的 Web 功能(FlexBox、高级选择器、Webfonts、Box Sizing、媒体查询、HTML5 标签...)
  • 规模复杂
  • 如果要加载图像,则不太容易使其工作......

选项 4:使用 Chrome Headless 和一个包装库

优点

  • 执行Javascript
  • 近乎完美的渲染

缺点

  • 在以下方面获得完全想要的结果并不那么容易:
    • 页面加载时间
    • 代理整合
    • 自动滚动
    • ...
  • 规模复杂
  • 如果 html 包含外部链接,速度会很慢甚至更慢

免责声明:我是 ApiFlash 的创始人。我已尽力提供诚实而有用的答案。


Mac*_*cha -1

不直接。像 Selenium 这样的软件具有这样的功能,并且可以由 PHP 控制,但有其他依赖项(例如使用您想要截图的浏览器在计算机上运行基于 java 的服务器)