UnhandledPromiseRejectionWarning: ошибка: оценка не удалась: ReferenceError: параметры не определены

const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const options = ["iframe"]
const url = 'https://www.loungeincomfort.com.au/'
const page = await browser.newPage();
await page.goto(url);
for (var i = 0; i < options.length; i++) {
    const frame = await page.$$eval(options[i], e => e.map(a => {
        const attrs = a.getAttributeNames();
        const len = attrs.length;
        const test = {};
        for (var i = 0; i < len; i++) {
            //test[attrs[i]].push({ label: "Hello World" })
            test[attrs[i]] = a.getAttribute(attrs[i])
        }
        return test;
    }))
    console.info(frame);
}
await browser.close();
})();

вывод такой:

    [
    {
    "width": "640",
    "height": "360",
    "src": "https://www.youtube.com/embed/ZJPsDBCD4XU",
    "frameborder": "0",
    "allow": "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",
    "allowfullscreen": ""
    }
    ]

Я хочу добавить к выводу параметры [i] и URL-адрес, который я добавил в свой код.

        const test = {
             "object": options[i],
             "page": url
         };

но я получаю сообщение об ошибке, что параметры не определены, и я получаю ту же ошибку с URL-адресом, если я удалил «объект»: параметры [i],

Что мне делать, чтобы устранить эту ошибку?

Итак, у меня есть еще одна проблема в моем выходе

вывод такой:

[{
    "width": "1170",
    "height": "490",
    "style": "visibility: visible; width: 100%; margin-left: 0px; height: 301.538px; margin-top: -3.26923px; position: absolute;"
}]

Я хочу разделить вывод стиля на объекты, чтобы они были такими

Я провел некоторое исследование по этому поводу и не нашел ничего полезного

[{
    "width": "1170",
    "height": "490",
    "style": {
           "visibility": "visible",
           "width": "100%",
           "margin-left": "0px",
           "height": "301.538px",
           "margin-top": "-3.26923px",
            "position": "absolute"

}}]

Заранее спасибо :)

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 958
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Код, к которому вы пытаетесь добавить options[i], — это клиентский код, который Puppeteer запускает в автономном браузере («функция страницы»). options там не существует.

Согласно документации, Puppeteer может передать это значение функции страницы в качестве аргумента, поэтому:

    const frame = await page.$$eval(options[i], (e, object, page) => e.map(a => {
//                                              ^ ^^^^^^^^^^^^^^
        const attrs = a.getAttributeNames();
        const len = attrs.length;
        const test = {object, page};
//                    ^^^^^^^^^^^^
        for (var i = 0; i < len; i++) {
            //test[attrs[i]].push({ label: "Hello World" })
            test[attrs[i]] = a.getAttribute(attrs[i])
        }
        return test;
    }), options[i], url)
//    ^^^^^^^^^^^^^^^^^

Я обновил свой вопрос, можете ли вы взглянуть и посмотреть, сможете ли вы мне помочь?

Mohamed Essam 15.12.2020 17:45

@MohamedEssam - ваше редактирование задает совершенно другой вопрос. Пожалуйста, разместите это как отдельный вопрос. (Короткий ответ: перебирать свойства свойства style элемента [a.style], а не смотреть строку в атрибуте style [a.getAttribute(...)].)

T.J. Crowder 15.12.2020 17:50

Это должно решить вашу проблему:

const browser = await puppeteer.launch();
    const options = ["iframe"];
    const url = "https://www.loungeincomfort.com.au/";
    const page = await browser.newPage();
    await page.goto(url);
    for (var i = 0; i < options.length; i++) {
      const object = options[i];
      const frame = await page.$$eval(
        options[i],
        (e, { url, object }) =>
          e.map((a) => {
            const attrs = a.getAttributeNames();
            const len = attrs.length;
            const test = { object, page: url };
            for (var i = 0; i < len; i++) {
              //test[attrs[i]].push({ label: "Hello World" })
              test[attrs[i]] = a.getAttribute(attrs[i]);
            }
            return test;
          }),
        { url, object }
      );
      console.info(frame);
    }
    await browser.close();

Объяснение: передать URL и объект в качестве дополнительных аргументов $$eval

Другие вопросы по теме