Javascript 木偶师:第一个环节起作用,其他环节不起作用

Javascript 木偶师:第一个环节起作用,其他环节不起作用,javascript,node.js,screenshot,puppeteer,screen-scraping,Javascript,Node.js,Screenshot,Puppeteer,Screen Scraping,这是我的第一篇文章。我正在用Nodejs学习JS。所以我看了木偶演员的剧本,拍下了元素的截图,我复制并修改了它。但是这里有一些问题 const express=require('express') const app=express() 常数端口=3000 app.get(“/”,(req,res)=>res.send('Veamos Kia!')) app.listen(port,()=>console.log(`app de ejempo escuchando el puerto${por

这是我的第一篇文章。我正在用Nodejs学习JS。所以我看了木偶演员的剧本,拍下了元素的截图,我复制并修改了它。但是这里有一些问题


const express=require('express')
const app=express()
常数端口=3000
app.get(“/”,(req,res)=>res.send('Veamos Kia!'))
app.listen(port,()=>console.log(`app de ejempo escuchando el puerto${port}!`))
应用程序获取(“/报废”,功能(请求、恢复){
res.send(“Estamos listos para empezar”);
})
const木偶演员=要求(“木偶演员”);
常量mkdirp=require('mkdirp')
//他们的生活和生活都很好
let date=新日期()
let day=date.getDate()
let month=date.getMonth()+1
let year=date.getFullYear()
如果(月<10){
log(`${day}-0${month}-${year}`)
}否则{
log(`${day}-${month}-${year}`)
}
//fecha formateada a DD/MM/AAAA
让dateFormat=`day}${month}${year}`;
//费卡·福塔达·托多·塞吉多酒店
让dateNumber=编号(日期);
常数fs=要求(“fs”);
//埃斯拉基地酒店
//const puppeter=require('puppeter');//包含库
(async()=>{//declare函数
const browser=wait puppeter.launch({'defaultViewport':{'width':1920,'height':545});//运行浏览器
const page=wait browser.newPage();//打开新选项卡
const navigationPromise=page.waitForNavigation()
等待页面。转到('https://www.fiat.cl/modelo/ducato-pasajeros/ducato-pasajeros-precios-y-versiones/#top'); 
等待page.waitForSelector('div.small-12.large-12.columns.container');//等待选择器加载
let element=wait page.$('div.small-12.large-12.columns.container');//声明一个带有ElementHandle的变量
wait element.screenshot({path:`fiat/${dateFormat}/1.png`});//在Puppeter中获取screenshot元素
等待页面。转到('https://www.fiat.cl/modelo/argo/argo-precios-y-versiones/#top'); 
等待航行的承诺
等待page.waitForSelector('div.small-12.large-12.columns.container');//等待选择器加载
wait element.screenshot({path:`fiat/${dateFormat}/2.png`});//在Puppeter中获取screenshot元素
等待浏览器。关闭();//关闭浏览器
})();
原木把这个扔给我; “(节点:17856)未处理的PromisejectionWarning:错误:节点不可见或不是HTMLElem”

第一个屏幕截图是正常的,但第二个有错误。
我做错了什么?很抱歉我的语法错误,我不是一个说英语的人,但我正在努力一天一天地改进它。

很可能第二个屏幕截图不起作用,因为你有一个旧
元素的句柄,它不再可访问(你已经导航到其他页面)。您必须重新初始化
元素
变量:

const express = require('express')

const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Veamos Kia!'))

app.listen(port, () => console.log(`App de ejemplo escuchando el puerto ${port}!`))
app.get("/scrapping", function (req, res) {
    res.send('Estamos listos para empezar');
})

const puppeteer = require("puppeteer");
const mkdirp = require('mkdirp')


//Vemos y formateamos la fecha en la que las capturas se hacen
let date = new Date()

let day = date.getDate()
let month = date.getMonth() + 1
let year = date.getFullYear()

if(month < 10){
console.log(`${day}-0${month}-${year}`)
}else{
console.log(`${day}-${month}-${year}`)
}
//fecha formateada a DD/MM/AAAA
let dateFormat = `${day}${month}${year}`;

//fecha formateada todo seguido
    let dateNumber = Number(date);
    const fs = require("fs");



    //ES LA BASE


    //const puppeteer = require('puppeteer');           // include lib
    (async () => {                                    // declare function
        const browser = await puppeteer.launch({'defaultViewport' : { 'width' : 1920, 'height' : 545 }});       // run browser
        const page = await browser.newPage();           // open new tab
        const navigationPromise = page.waitForNavigation()

        await page.goto('https://www.fiat.cl/modelo/ducato-pasajeros/ducato-pasajeros-precios-y-versiones/#top');



        await page.waitForSelector('div.small-12.large-12.columns.container');          // wait for the selector to load
        let element = await page.$('div.small-12.large-12.columns.container');        // declare a variable with an ElementHandle
        await element.screenshot({path: `1.png`}); // take screenshot element in puppeteer


        await page.goto('https://www.fiat.cl/modelo/argo/argo-precios-y-versiones/#top');
        await navigationPromise



        await page.waitForSelector('div.small-12.large-12.columns.container');          // wait for the selector to load
        let elementAfterNavigation = await page.$('div.small-12.large-12.columns.container');        // re-initialize element!
        await elementAfterNavigation.screenshot({path: `2.png`}); // take screenshot element in puppeteer

        await browser.close();                          // close browser
})();
const express=require('express'))
const app=express()
常数端口=3000
app.get(“/”,(req,res)=>res.send('Veamos Kia!'))
app.listen(port,()=>console.log(`app de ejempo escuchando el puerto${port}!`))
应用程序获取(“/报废”,功能(请求、恢复){
res.send(“Estamos listos para empezar”);
})
const木偶演员=要求(“木偶演员”);
常量mkdirp=require('mkdirp')
//他们的生活和生活都很好
let date=新日期()
let day=date.getDate()
let month=date.getMonth()+1
let year=date.getFullYear()
如果(月<10){
log(`${day}-0${month}-${year}`)
}否则{
log(`${day}-${month}-${year}`)
}
//fecha formateada a DD/MM/AAAA
让dateFormat=`day}${month}${year}`;
//费卡·福塔达·托多·塞吉多酒店
让dateNumber=编号(日期);
常数fs=要求(“fs”);
//埃斯拉基地酒店
//const puppeter=require('puppeter');//包含库
(async()=>{//declare函数
const browser=wait puppeter.launch({'defaultViewport':{'width':1920,'height':545});//运行浏览器
const page=wait browser.newPage();//打开新选项卡
const navigationPromise=page.waitForNavigation()
等待页面。转到('https://www.fiat.cl/modelo/ducato-pasajeros/ducato-pasajeros-precios-y-versiones/#top');
等待page.waitForSelector('div.small-12.large-12.columns.container');//等待选择器加载
let element=wait page.$('div.small-12.large-12.columns.container');//声明一个带有ElementHandle的变量
wait element.screenshot({path:`1.png`});//在Puppeter中获取screenshot元素
等待页面。转到('https://www.fiat.cl/modelo/argo/argo-precios-y-versiones/#top');
等待航行的承诺
等待page.waitForSelector('div.small-12.large-12.columns.container');//等待选择器加载
let element afternavigation=wait page.$('div.small-12.large-12.columns.container');//重新初始化元素!
wait element afternavigation.screenshot({path:`2.png`});//在Puppeter中获取screenshot元素
等待浏览器。关闭();//关闭浏览器
})();

请注意
元素afternavigation
。这就是为什么这样的功能(例如,单个屏幕截图)应该有自己的功能和作用域变量。

第二个屏幕截图很可能不起作用,因为您有一个旧
元素的句柄,该元素不再可访问(您已经导航到其他页面)