Кукловод для прослушивания map.on ('load') изнутри Node - PullRequest
0 голосов
/ 25 сентября 2019

Использование Puppeteer для прослушивания map.on ('load') изнутри Node.

(async () => {
  const browser = await puppeteer.launch({ headless: false, devtools: true });
  const page = await browser.newPage();

  function nodeLog(msg) {
    console.log(msg);
  }

  page.on('load', async () => {
    await page.evaluate(() => {
      window.map.on('load', () => {
        console.log("This runs on the index.html js but I do not need that");
        nodeLog("WHY IS THIS NOT WORKING??")
      })
    })
  });

  await page.goto(`file:${__dirname + '/index.html'}`);

})();

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Я тоже разобрался, как вернуть информацию.Я перечитал документы и получил некоторое понимание.Я не понимал контекст.

const nodeLog = msg => console.log;
const msg = await page.evaluate(() => { return 'this is working' });

nodeLog(msg);
0 голосов
/ 25 сентября 2019

waitForSelector должно работать, например.при использовании селектора из легко рендеринга карты ... или прослушивания события map.bounds_changed или map.idle, которые запускаются после полной загрузки карты.Событие map.load может произойти слишком рано.

Вот рабочий пример, который я только что собрал:

const puppeteer = require('puppeteer');
run().then(() => {console.log('puppeteer performing async execution.')}).catch(error => {console.log(error)});
const url = 'https://developers-dot-devsite-v2-prod.appspot.com/maps/documentation/javascript/examples/full/map-simple';

async function run() {
  puppeteer
    .launch({devtools: true, headless: false})
    .then(async browser => {

      const page = await browser.newPage();
      await page.goto(url);

      await page.evaluate(() => {
        window.map.addListener('idle', function(){
          console.log('the map is idle now');
          var div = document.createElement('div');
          div.setAttribute('id', 'puppeteer-map-idle');
          window.document.body.append(div);
        });
      });

      await page.waitForSelector('#puppeteer-map-idle' , {
        timeout: 5000
      }).then((res) => {
        console.log('selector #puppeteer-map-idle has been found.');

        /* in here the map should be fully loaded. */

      });

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

По общему признанию, это своего рода обходной путь, но манипулирование DOM может бытьнаблюдаемый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...