3

特定のウィンドウサイズでスクリーンショットを撮る必要があります。私はこのブログとこのページhttps://developers.google.com/web/updates/2017/04/headless-chromeを読んでいましたが、initでウィンドウのサイズを変更する方法を理解できませんでした。 1280x1696ヘッドレスクロムランチャー - ウィンドウサイズエラーの原因

--window- =

--windowサイズ= 1280,1696

--windowサイズ:

は、私は以下の全てのオプションで --window-sizeとなしの仕事を渡すために試してみましたサイズ1280,1696

--windowサイズ1280x1696

今、私のscreensh、すべての悪いことにこれをしばらくしてから空白になります。これを引き起こすヘッドレスブラウザには何らかの種類のメモリが残っていますか?私はまだMacを再起動しようとしていないが、これはおそらく次のものである。

したがって、ウィンドウサイズを指定してフルページのスクリーンショットを取得する方法は何ですか? phantom.jsでは、これは非常に些細なことです。

alias chrome-canary="/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary" 

chrome-canary --headless --disable-gpu --screenshot --window-size=300,1696 https://www.yahoo.com/ 

UPDATE 1

私はヘッドレスクロームカナリアは非常に不安定で実現:

私のコードは、私は、コマンドラインでこれを行う場合は、それが正常に動作します

const chromeLauncher = require('chrome-launcher'); 
const CDP = require('chrome-remote-interface'); 
const file = require('fs'); 

(async function() { 
    async function launchChrome() { 
    return await chromeLauncher.launch({ 
     chromeFlags: [ 
     '--window-size=1280,1696', 
     '--disable-gpu', 
     '--headless' 
     ] 
    }); 
    } 
    const chrome = await launchChrome(); 
    const protocol = await CDP({ 
    port: chrome.port 
    }); 

    const { 
    DOM, 
    Network, 
    Page, 
    Emulation, 
    Runtime 
    } = protocol; 
    await Promise.all([Network.enable(), Page.enable(), Runtime.enable(), DOM.enable()]); 

    Page.navigate({ 
    url: 'https://www.yahoo.com/' 
    }); 

    Page.loadEventFired(async() => { 

    console.log('Start Page.loadEventFired'); 
    const script1 = "document.querySelector('p').textContent" 
    const result = await Runtime.evaluate({ 
     expression: script1 
    }); 
    console.log(result.result.value); 

    const ss = await Page.captureScreenshot({format: 'png', fromSurface: false}); 
    file.writeFile('output.png', ss.data, 'base64', function(err) { 
     if (err) { 
     console.log(err); 
     } 
    }); 

    protocol.close(); 
    chrome.kill(); 
    }); 

})(); 

を下回っています少なくともMacでは。私がターミナルを閉めてそれを新しく始めると、いつか動作します。しかし、まったく同じスクリプトを実行した後、それは永遠に(私は一晩中)辞めました。私は今日すべてのもの(Chrome Canary、chrome-launcher、chrome-remote-interface)をアップデートしてデバッグを続けます。多分それはまだそれの主要な時間ではない。

+0

を私は ' 'deviceScaleFactor' での問題を停止していた:0 'を、それを設定します1に解決される。 – ton

答えて

0

OK --window-sizeを使用しても機能しないことを知りました。以下は動作します:

を追加しました:削除

Page.setDeviceMetricsOverride({ 
    'width': 735, 
    'height': 2200, 
    'deviceScaleFactor': 1, 
    'mobile': false 
    }); 

(ヘッドレスクロームがフリーズする原因):

const script1 = "document.querySelector('p').textContent" 
const result = await Runtime.evaluate({ 
    expression: script1 
}); 
console.log(result.result.value); 
関連する問題