Node.js 带节点的截屏URL-异步
这是我的密码:Node.js 带节点的截屏URL-异步,node.js,Node.js,这是我的密码: 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-a
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中的最后一项。其他是零字节的图像。我认为我需要异步执行该操作,这样就不会每次都覆盖流
我该怎么做
更新:
我希望屏幕截图能够正常工作,但如果url不可访问,则捕获错误,而不是阻止
更新:
虽然下面的代码仍然让我的电脑速度慢了很多,但效果更好
const screenshotPromise = require('screenshot-promise');
您未能在此处添加的是错误: events.js:160
投掷者;//未处理的“错误”事件 ^ 错误:无法加载url:
在LineStream.byline.on.data中
(e:--\node\u modules\screenshot stream\index.js:77:16)
在emitOne(events.js:96:13)
在LineStream.emit(events.js:188:7) 问题是模块
屏幕截图流
正在使用PhantomJS,而PhantomJS无法访问输出错误的页面
此错误似乎与此问题有关:
Techcrunch.com和Aol.com似乎使用Qt加载为应用程序字体的web字体(例如“BebasNeue webfont.ttf”)。那里可能出了点问题
我的建议是使用谷歌的Puppeter,它包含一个内置的屏幕截图方法:我在最后做的代码,有效:
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;
}
}
})();
const puppeter=require('puppeter');
const urlp=require('url');
var URL=require('URL-parse');
变量URL=[
'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+摩托车',
'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=函数(href){
var l=document.createElement(“a”);
l、 href=href;
返回l;
};
(异步()=>{
const browser=wait puppeter.launch();
const page=wait browser.newPage();
page.waitForNavigation({
超时:40000
});
for(设i=0;i
stream定义的变量在哪里?const stream=screenshot(url,'1024x768',{crop:true});谷歌木偶演员看起来可能是一个更好的选择。谢谢
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;
}
}
})();