- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我经常遇到需要使用 Spatie 的 Browsershot 的场景捕获非常高的网页。但是,当我这样做时,生成的屏幕截图每 16,384 个像素重复一次。 (您可以在此处查看重复示例:https://github.com/GoogleChrome/puppeteer/issues/1576)
这是 Puppeteer 的一个已知限制(记录在 here 中)。目前推荐的解决方法似乎是截取多个屏幕截图,并使用 clip()
以 16,384 像素的增量偏移屏幕截图。您可以使用 Node.js 查看此方法的示例 here .
现在,在客户端,这种方法似乎工作得很好,但在 Browsershot 库的上下文中并不能真正帮助我们。据我所知,在 PHP 中没有可行的方法来获取页面的高度;谁能想到在服务器端破解超长屏幕截图的任何潜在解决方法?
我知道这并不是图书馆的真正用途,归根结底,这甚至不是图书馆的限制,但我想无论如何我都会把它扔掉。
最佳答案
随着对 Spatie 的新贡献 Browsershot您可以使用您提供的方法捕获非常高的网页 example很容易。
$url = 'http://www.spiegel.de';
//Get scrollWidth and scrollHeight of the body in the emulated device
$browsershot = new Browsershot($url, true);
$dimensions = $browsershot
->device('iPhone 6')
->waitUntilNetworkIdle() // ensuring all additional resources are loaded
->evaluate("JSON.stringify({height: document.body.scrollHeight, width: document.body.scrollWidth})");
$dimensions = json_decode($dimensions);
// iphone 6 scale factor is equal to 2
// https://github.com/GoogleChrome/puppeteer/blob/master/DeviceDescriptors.js#L288
$dpr = 2;
$maxScreenshotHeight = floor(16 * 1024 / $dpr);
for ($ypos = 0; $ypos < $dimensions->height; $ypos += $maxScreenshotHeight) {
$height = min($dimensions->height - $ypos, $maxScreenshotHeight);
$browsershot = new Browsershot($url, true);
$browsershot
->device('iPhone 6')
->waitUntilNetworkIdle()
->clip(0, $ypos, $dimensions->width, $height)
->timeout(120000) // handling timeout
->save('screenshot-@' . $ypos . 'px.png');
}
关于javascript - 使用 Spatie 的 Browsershot/Headless Chrome 截取超长截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48392318/
下面是split截取获得 ? 1
我正在写一个小编辑。我想更改 QTextEdit 的默认行为,即在 Tab 时插入制表符被击中。相反,我想放 4 个空格。这样做的推荐方法是什么?我想关于子类化 keyPressedEvent ,但也
我正在寻找一种简单的方法来在我的 ASP 页面中截取 iFrame 的屏幕截图。我只是无法用 C# 实现它,而且我缺乏 Javascript 知识!有没有人知道实现这一目标的简单和最佳方法? 我正在尝
这让我感到困惑。 DirectX 绕过所有内容并直接与设备驱动程序对话,因此 GDI 和其他常用方法将不起作用 - 除非 Aero 被禁用(或不可用),否则出现的只是屏幕左上角的黑色矩形。我已经尝试了
我正在开发一个应用程序,当我按下按钮时,我想发送 2 个 View 的 2 个屏幕截图,并将其附加到电子邮件中。 这两个 View Controller 被称为 secondViewControlle
我尝试截取一个用 WPF 编写的应用程序,但应用程序没有被捕获,我是否必须使用特殊工具来截取屏幕截图? 最佳答案 您可以使用 RenderTargetBitmap从 WPF 控件生成图像。 p
以下是我的断言。 Assert.assertEquals(securityQuestionPage.UserName.getText().toString(),BaseClass.unsuccessf
我有一个 ImageView @property (strong, nonatomic) IBOutlet UIImageView *imageView; 我想截图。我的代码占据了整个屏幕。我已经查看
我必须编写一些 javascript 代码来截取网页的屏幕截图,但不能在前台渲染它。首先,这可能吗?我需要使用一些外部库吗?请给我一些想法:) 最佳答案 如果您正在谈论在 Firefox chrome
我想在我的 tableview 屏幕截图图像中包含导航栏。以下代码用于捕获整个 TableView ,我尝试了其他代码来捕获导航栏而不是整个 TableView 。可以同时进行吗? func scre
我使用以下代码截取我的 View : UIGraphicsBeginImageContextWithOptions(containerView.bounds.size, NO, [[UIScreen
我正在开发一个简单的相机应用程序。我有截取整个 Activity 的屏幕截图并将其写入 SD 卡的代码。问题是 Surfaceview 返回黑屏。 我想知道如何独立截取surfaceview的截图。这
基本上我想做的是: 我在页面上有一个 flash 游戏(例如 pacman) 我希望能够使用 javascript 打印该游戏的屏幕 这可能吗?我知道我可以将游戏 swf 包含在另一个 swf 中并使
我正在开发的应用程序使用 Collection View 单元格向用户显示数据。我希望用户能够共享单元格中包含的数据,但通常有太多单元格无法尝试调整大小并适合单个 iPhone 屏幕大小的窗口并获取屏
有人可以分享代码来截取网络浏览器控件的屏幕截图并将其保存在预定路径中。 我正在使用 VS 2008 .Net 3.5。 最佳答案 你可以使用 Control.DrawToBitmap() ,即使它在
在 String 中提供了两个截取字符串的方法,一个是从指定位置截取到字符串结尾,另一个是截取指定范围的内容。下面对这两种方法分别进行介绍。 1. substring(int beginIndex
如下所示: ? 1
MySQL字符串的拼接、截取、替换、查找位置。 常用的字符串函数: 函数 说明 CONCAT(s1,s2,...)
我想截取UIView(该 View 将包含签名)并将其保存到应用程序文件中的本地文件中,以便以后调用图像点显示在类似于 UIImageView 的内容中。下面是签名 UIView 背后的代码。 #im
下面的代码是截取当前页面的屏幕截图。 html2canvas中的url可以截图吗?我的意思是我有一个 URL 是 mydomain.com/home mydomain.com/home?id=2 my
我是一名优秀的程序员,十分优秀!