E
E
EvgenyKabakov2020-09-20 10:57:54
JavaScript
EvgenyKabakov, 2020-09-20 10:57:54

How to fix page is not defined error?

Good day to all, please tell me how to fix the page is not defined error?
When running the script, node gives an error
(node:8260) UnhandledPromiseRejectionWarning: Error: Evaluation failed: ReferenceError: page is not defined

There is this code:

const puppeteer = require('puppeteer');

(async() => {
  //  Запуск chrome
  const browser = await puppeteer.launch({
    args: ['--no-sandbox','--window-size=1500,920'], headless: false }
  );
  // Открытие новой страницы
  var page = await browser.newPage();

const content = await page.evaluate(() => {
    
    // получаем и проверяем все этажи
    var floors = document.querySelectorAll('.item.collection-item.valign-wrapper');
    // console.log('Список этажей: ' + floors);

    var resultArr = [...floors].reduce((acc, el) => {
      // Находим span с номером этажа
      var floorNumBlock = el.querySelector('span.valign');

      // Получаем текстовое содержание, преобразовываем это к числу, проверяем
      var floorNum = Number(floorNumBlock.textContent);

      // Находим все ссылки внутри этажа, проверяем
      var floorLinks = el.getElementsByTagName('a');

      // Получаем ключи объекта с ссылками
      var linkItems = Object.keys(floorLinks);

      // Получаем первый элемент, проверяем
      var linkItem = floorLinks[linkItems[0]]; 
      //console.log('Первый элемент этажа: ' + linkItem);

      // Получаем атрибут href элемента
      var linkItemHref = 'https://******.ru/admin/module.php/'+linkItem.getAttribute('href');
      acc.push(
        {
          floorNums: floorNum,
          floorLink: linkItemHref
        }
      )
      return acc
    }, []);

    console.log('Массив этажей собран');

    console.log('----Обработка массива этажей----');
    const houseFloorSelected = 4;
    resultArr.forEach(function(item, resultArr) {

      let itemFloorNumber = item.floorNums;
      let itemFloorLink = item.floorLink;

      console.log('Номер этажа и тип: ' + itemFloorNumber + ' ' + typeof(itemFloorNumber));
      console.log('Ссылка этажа и тип: ' + itemFloorLink + ' ' + typeof(itemFloorLink));

      console.log(houseFloorSelected);

      if(itemFloorNumber === houseFloorSelected) {
        console.log('test');
        page.goto(itemFloorLink);
      }
    });
})();

Answer the question

In order to leave comments, you need to log in

1 answer(s)
K
kocherman, 2020-09-20
@EvgenyKabakov

there is a sensible for..of loop

for ( let item of resultArr ){
  //...
}

or
for ( let [index,item] of [...resultArr].entries() ){
  //...
}

where is the mod for this forEach()??

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question