2017-06-17 4 views
3

Egal was ich versuche, die maximale Höhe eines ganzseitigen Screenshots mit Headless Chrome 60 (und 59) beträgt 16.348px.Maximale Höhe von 16.384px für Headless Chrome Screenshots?

Es ist kein Speicherproblem. Es gibt keine segfaults und keine, zum Beispiel, FATAL:memory_linux.cc(35) Out of memory. Nachrichten. Keiner. Capturing Screenshots sind "erfolgreich". Das Ändern des Screenshot-Formats - PNG oder JPEG - hat keine Auswirkungen.

Die Screenshot-Breite kann variieren, aber die Höhe des gespeicherten Screenshots ist immer auf 16.348px beschränkt. Beispiel

1600x16384, 1200x16384, 2400x16384 usw.

Ich upscaled Screenshots mit diesem minimalen Code nehmen (full source):

const upscale = 2; 

const viewportWidth = 1200; 
const viewportHeight = 800; 

.... 

// Set up viewport resolution, etc. 
const deviceMetrics = { 
    width: viewportWidth, 
    height: viewportHeight, 
    deviceScaleFactor: 0, 
    mobile: false, 
    fitWindow: false, 
    scale: 1 // Relative to the upscale 
}; 
await Emulation.setDeviceMetricsOverride(deviceMetrics); 
await Emulation.setVisibleSize({width: viewportWidth, height: viewportHeight}); 
await Emulation.setPageScaleFactor({pageScaleFactor: upscale}); 

// Navigate to target page 
await Page.navigate({url}); 

const {root: {nodeId: documentNodeId}} = await DOM.getDocument(); 
const {nodeId: bodyNodeId} = await DOM.querySelector({ 
    selector: 'body', 
    nodeId: documentNodeId, 
}); 
const {model: {height}} = await DOM.getBoxModel({nodeId: bodyNodeId}); 

// Upscale the dimensions for full page 
await Emulation.setVisibleSize({width: Math.round(viewportWidth * upscale), height: Math.round(height * upscale)}); 

// This forceViewport call ensures that content outside the viewport is 
// rendered, otherwise it shows up as grey. Possibly a bug? 
await Emulation.forceViewport({x: 0, y: 0, scale: upscale}); 

const screenshot = await Page.captureScreenshot({format}); 
const buffer = new Buffer(screenshot.data, 'base64'); 

file.writeFile(outFile, buffer, 'base64', function (err) { 
    if (err) { 
     console.error('Exception while saving screenshot:', err); 
    } else { 
     console.log('Screenshot saved'); 
    } 
    client.close(); 
}); 

Ich konnte keine nützlich finden Chrome switches entweder. Ist das ein festes Limit für Chrome? 16384 ist eine verdächtige Zahl (2^14 = 16.384). Wie kann diese Höhe erhöht werden?

+0

Von dem, was ich lese es ist eine Einschränkung der [Skia Bibliothek] (https://bugs.chromium.org/p/chromium/issues/detail? id = 339725). Aber dieser Beitrag stammt aus dem Jahr 2014. [Dieser Beitrag] (https://groups.google.com/a/chromium.org/forum/#!topic/headless-dev/qcvOjVUZ-WQ) könnte auch informativ sein. – pattulus

Antwort

Verwandte Themen