क्रोम हेडलेस के साथ पेज लोड होने के बाद पेज एन सेकंड का स्क्रीनशॉट कैसे लें?


16

दोनों मैं क्रोम बिना सिर के साथ एक पृष्ठ का एक स्क्रीनशॉट बनाना चाहते हैं, और हम देखा है --screenshotऔर --virtual-time-budgetलोड समय के लिए एक स्क्रीनशॉट ब्राउज़र की प्रतीक्षा ले रहे हैं और सीमित करने के लिए स्विच।

मेरे पास पृष्ठ पर ऐसे तत्व हैं जो प्रस्तुत करने के लिए DOMContentLoaded की प्रतीक्षा करते हैं, और हम उन पर भी कब्जा करना चाहते हैं।

मैं स्क्रीनशॉट लेने के लिए एक रास्ता ढूंढ रहा हूं, कहते हैं, पेज लोड होने के 5 सेकंड बाद , सही के बजाय जब इसे लोड माना जाता है।

हम अपने NodeJS एप्लिकेशन से क्रोम हेडलेस को इस तरह बुला रहे हैं:

cp.spawnSync("google-chrome-beta", ["--headless", "--disable-gpu", "--screenshot", "--profile-directory=Default", "--window-size=1920,6200", "--virtual-time-budget=25000", url]);

हम जानते हैं कि कमांड लाइन स्विच का उपयोग करने के बजाय नोड से एक एपीआई का उपयोग करके इसे प्राप्त करने वाले संभव एनपीएम पुस्तकालय हैं, लेकिन हम स्थिरता के बारे में चिंतित हैं (क्रोम टीम नियमित रूप से अपने सभी आंतरिक एपीआई को तोड़ना पसंद करती है)।

टी एल; डॉ

स्क्रीनशॉट लेने से पहले पेज लोड होने के कुछ सेकंड बाद क्रोम हेडलेस बनाने के लिए क्या कोई रास्ता है?


3
डेविड श्नेर ने नोडज की स्क्रिप्ट साझा की, जो कि आप यहां चाहते हैं । भागो nodejs index.js --url="http://www.eff.org" --delay=50005 सेकंड की देरी के लिए।
वेस्टीमिल ओवकास

जवाबों:


6

मैं उसी चीज की तलाश में था। मुझे जो मिला है वह Google कठपुतली है। https://github.com/GoogleChrome/puppeteer

बहुत सारे उदाहरण हैं, लेकिन मूल रूप से आप वही कर सकते हैं जो मैंने किया था।

const puppeteer = require('puppeteer');

function timeout(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
};

(async() => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.setViewport({width: 5960, height: 4209})
    await page.goto('http://stackoverflow.com', {waitUntil: 'networkidle'});
    await timeout(10000)
    await page.screenshot({path: 'example.png'});
    browser.close();

})();

Mar 2019:UnhandledPromiseRejectionWarning: Error: ERROR: "networkidle" option is no longer supported. Use "networkidle2" instead
4253wyerg4e 22

2

जैसा कि Vlastimil Ovčáčík में कहा गया है, डेविड Schnurr ने लिखा है और माध्यम पर इस सटीक उद्देश्य के लिए एक नोडजेएस स्क्रिप्ट साझा की है ।

स्क्रिप्ट प्लग एंड प्ले होनी चाहिए, कुछ निर्भरता को घटाती है।

सेटअप इस प्रकार है:

  1. क्लोन रिस्पांसिटरी।
    git clone https://github.com/schnerd/chrome-headless-screenshots.git
  2. निर्भरता स्थापित करें:
    npm install chrome-remote-interface minimist
  3. स्क्रिप्ट चलाएँ
    node index.js --url="/superuser/1209741/how-to-take-a-screenshot-of-a-page-n-seconds-after-page-is-loaded-with-chrome-he" --delay=4000
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.