up:第一个链接起作用,其他不起作用

伊凡·加瑞(Ivan Garay)

这是我的第一篇文章。我用Node.js学习JS。因此,我看到了Puppeteer脚本来截取元素的屏幕截图,然后进行复制和更改。但是这里有些问题。


        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: `fiat/${dateFormat}/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
                
                await element.screenshot({path: `fiat/${dateFormat}/2.png`}); // take screenshot element in puppeteer

                await browser.close();                          // close browser
    })();


日志把这个扔给了我。“((node:17856)UnhandledPromiseRejectionWarning:错误:节点不可见或不是HTMLElem”

第一个屏幕截图正常,但第二个屏幕有错误。我究竟做错了什么?对不起我的语法错误,我不是说英语的人,但我正在努力改善它。

马克·皮奥特洛夫斯基

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

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
})();

请注意elementAfterNavigation这就是为什么此类功能(例如单个屏幕截图)应具有范围变量的功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

倒数仅在第一个按钮上起作用,而在其他按钮上不起作用

为什么第一个 printf 不起作用而其他两个使用相同的结构?

如果出现其他通知,我的第一个“推送”通知将不起作用

我的 Select 标签的第一个选项不起作用,但我的其他选项运行良好

第一个硒程序不起作用

第一个 TestNG 代码不起作用

java list.remove对于第一个元素工作良好,但对其他元素却不起作用

第一个孩子最后一个孩子Dom遍历不起作用

为什么第一个断言起作用,而第二个断言却不起作用?

为什么第一个程序起作用,而第二个程序却不起作用?

匹配第一个dt和第一个dd,不起作用

只是第一个ArrayList <String>起作用

绑定仅在第一个TabItem起作用

检索小于给定日期的第一个日期不起作用Excel

学习 Rails - 路线在我的第一个教程中不起作用

当第一个地图没有元素时,mergeMaps不起作用?

DIV上的第一个孩子选择不起作用

定位带有第一个孩子的引导行不起作用

DOMPDF @page:第一个选择器不起作用

CSS选择所有但第一个tr不起作用

为什么不起作用:“ defn的第一个参数必须是符号”

为什么第一个函数在我用javascript覆盖时不起作用

:第一个孩子选择器不起作用?

为什么交易不起作用?仅适用于第一个 .savechanges();

Spring Boot RequestMapping 在第一个 Pathvariable 后不起作用

在零索引处插入第一个项目时,notifyItemInserted()不起作用

在第一个AJAX请求之后Angularjs:ng-model绑定不起作用

实体框架代码第一个多对多关系不起作用

第一个使用$ .ajax的脚本,它不起作用