यहाँ मेरा कोड है:

const fs = require('fs');
const screenshot = require('screenshot-stream');
const urlp = require('url');
var urls=[
'https://archive.org/details/8bitrecs',
'http://hackaday.com/',
'http://techcrunch.com/2012/02/16/auraslate-is-an-open-source-android-tablet-for-hackers/',
'http://www.english.illinois.edu/-people-/faculty/debaron/482/482readings/greenfield.html',
'http://sustain.rca.ac.uk/Sustain-Talks'];
urls.forEach(function(url){
    const stream = screenshot(url, '1024x768', {crop: true});
    stream.pipe(fs.createWriteStream(urlp.parse(url).hostname + 'test-1024x768.png')); 
});

यह केवल url में अंतिम आइटम का स्क्रीनशॉट लेता है। अन्य शून्य बाइट्स वाली छवियां हैं। मुझे लगता है कि मुझे ऑपरेशन को असीमित रूप से करने की ज़रूरत है, इसलिए यह हर बार स्ट्रीम को ओवरराइट नहीं करता है।

यह मैं कैसे करूंगा?

अद्यतन: मैं चाहता हूं कि स्क्रीनशॉट काम करे, लेकिन त्रुटियों को पकड़ें और यदि कोई यूआरएल पहुंच योग्य नहीं है तो ब्लॉक न करें

अपडेट करें: https://www.npmjs.com/package/screenshot-promise ने बेहतर काम किया, हालांकि नीचे दिया गया यह कोड अभी भी मेरे कंप्यूटर को बहुत धीमा कर देता है!

const screenshotPromise = require('screenshot-promise');

...

urls.forEach(function(url) {



const promise = screenshotPromise(url, '1024x768', {crop: true}).then(buf => {
    fs.writeFileSync(urlp.parse(url).hostname + 'test-1024x768.png', buf);
});


promise.then((value) => {
  // value is whatever we passed in the resolve(...) function above.
  // It doesn't have to be a string, but if it is only a succeed message, it probably will be.
  console.log(value);
});
0
weaveoftheride 17 सितंबर 2018, 11:06

2 जवाब

सबसे बढ़िया उत्तर

आप यहाँ जो जोड़ने में विफल रहे वह त्रुटि है:

इवेंट.जेएस:160
फेंक एर; // हैंडल न किया गया 'त्रुटि' घटना ^

त्रुटि: url लोड नहीं कर सका: http://techcrunch.com/2012/02/16/auraslate-is-an-open-source-android-tablet-for-hackers/
LineStream.byline.on.data
. पर (e:---\node_modules\screenshot-stream\index.js:77:16)
एमिटवन पर (events.js:96:13)
LineStream.emit पर (events.js:188:7)

मुद्दा यह है कि मॉड्यूल screenshot-stream फ़ैंटॉमजेएस का उपयोग कर रहा है, और फ़ैंटॉमजेएस उस पृष्ठ तक पहुंचने में असमर्थ है जो त्रुटि उत्पन्न करता है।

यह त्रुटि इस समस्या से संबंधित प्रतीत होती है: https://github.com/ariya/phantomjs/issues/ 10460.

Techcrunch.com और Aol.com वेब फोंट (जैसे "BebasNeue-webfont.ttf") का उपयोग करते प्रतीत होते हैं, जो Qt एप्लिकेशन फोंट के रूप में लोड होता है। हो सकता है कि वहां कुछ गलत हो रहा हो।

मेरा सुझाव Google के कठपुतली का उपयोग कर रहा है जिसमें एक अंतर्निहित स्क्रीनशॉट विधि शामिल है: https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagescreenshotoptions

1
Seblor 17 सितंबर 2018, 16:10

कोड मैंने अंत में किया जो काम करता था:

   const puppeteer = require('puppeteer');
const urlp = require('url');
var URL = require('url-parse');
var urls = [
    'https://archive.org/details/8bitrecs',
    'http://hackaday.com/',
    'http://techcrunch.com/2012/02/16/auraslate-is-an-open-source-android-tablet-for-hackers/',
    'http://www.english.illinois.edu/-people-/faculty/debaron/482/482readings/greenfield.html',
    'http://sustain.rca.ac.uk/Sustain-Talks',
    'https://www.quintessentially.com/',
    'https://www.producthunt.com/tech/ux-project-checklist',
    'https://freedom.press/',
    'http://issuu.com/search?q=vintage+motorcycle',
    'http://www.pocketmod.com/v2/',
    'https://www.metamind.io/',
    'http://nautil.us/blog/chernobyls-hot-mess-the-elephants-foot-is-still-lethal',
    'https://www.instructables.com/id/Tool-Storage-Hacks-or-How-to-Hang-Those-Black-Frid/',
    'https://www.zippi.co.uk/framed-photo-print'
];
var getLocation = function(href) {
    var l = document.createElement("a");
    l.href = href;
    return l;
};
(async() => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    page.waitForNavigation({
        timeout: 40000
    });
    for (let i = 0; i < urls.length; i++) {
        const url = urls[i];
        var url1 = new URL(url);
        try {
            await page.goto(`${url}`);
            await page.screenshot({
                path: 'images/' + url1.hostname + '.png'
            });
        } catch (error) {
            console.log(error.message);
            // await page.close();
            // await browser.close();
            // process.exit(1);
            continue;
        }
    }
})();
0
weaveoftheride 17 सितंबर 2018, 22:50