Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用空间';s Browsershot/Headless Chrome可捕捉超长屏幕截图_Javascript_Php_Laravel_Google Chrome Headless - Fatal编程技术网

Javascript 使用空间';s Browsershot/Headless Chrome可捕捉超长屏幕截图

Javascript 使用空间';s Browsershot/Headless Chrome可捕捉超长屏幕截图,javascript,php,laravel,google-chrome-headless,Javascript,Php,Laravel,Google Chrome Headless,我会定期遇到需要使用Spatial来捕获非常高的网页的场景。但是,当我这样做时,结果屏幕截图每16384像素重复一次。(您可以在此处看到重复的示例:) 这是一个已知的木偶演员的限制(文献记载)。目前推荐的解决方法似乎是拍摄几个屏幕截图,并使用clip()以16384px的增量偏移屏幕截图。您可以使用Node.js看到这种方法的一个示例 现在,在客户端,这种方法似乎工作得很好,但在Browsershot库的上下文中,这并不能真正帮助我们。据我所知,在PHP中没有可行的方法获得页面的高度;有人能想到

我会定期遇到需要使用Spatial来捕获非常高的网页的场景。但是,当我这样做时,结果屏幕截图每16384像素重复一次。(您可以在此处看到重复的示例:)

这是一个已知的木偶演员的限制(文献记载)。目前推荐的解决方法似乎是拍摄几个屏幕截图,并使用
clip()
以16384px的增量偏移屏幕截图。您可以使用Node.js看到这种方法的一个示例

现在,在客户端,这种方法似乎工作得很好,但在Browsershot库的上下文中,这并不能真正帮助我们。据我所知,在PHP中没有可行的方法获得页面的高度;有人能想到服务器端有什么潜在的解决办法来破解超长屏幕截图吗


我知道这并不是图书馆的预期用途,最终,这甚至不是图书馆的限制,但我想我还是把它扔掉吧。

有了对Spatial的新贡献,你可以用你提供的方法轻松捕获非常高的网页

$url='1!'http://www.spiegel.de';
//获取模拟设备中主体的scrollWidth和scrollHeight
$browsershot=newbrowsershot($url,true);
$dimensions=$browsershot
->设备(“iPhone 6”)
->waitUntilNetworkIdle()//确保加载所有其他资源
->求值(“JSON.stringify({height:document.body.scrollHeight,width:document.body.scrollWidth})”;
$dimensions=json_解码($dimensions);
//iphone 6的比例因子等于2
// https://github.com/GoogleChrome/puppeteer/blob/master/DeviceDescriptors.js#L288
$dpr=2;
$maxScreenshotHeight=楼层(16*1024/$dpr);
对于($ypos=0;$ypos<$dimensions->height;$ypos+=$maxScreenshotHeight){
$height=min($dimensions->height-$ypos,$maxScreenshotHeight);
$browsershot=newbrowsershot($url,true);
$browsershot
->设备(“iPhone 6”)
->waitUntilNetworkIdle()
->剪辑(0,$ypos,$dimensions->width,$height)
->超时(120000)//处理超时
->保存('screenshot-@.$ypos.'px.png');
}
$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');
}