проблема с кукловодом console.log - PullRequest
0 голосов
/ 27 мая 2020

Я просто хочу использовать XPath для получения innerText с помощью Puppeteer. Это код

import * as puppeteer from 'puppeteer-core';
(async () => {
    // Make the browser visible by default, extend the timeout, and set a default viewport size
    const browser = await puppeteer.launch({
      executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
      userDataDir: 'C:\\ctvbanhang\\browserData',
      defaultViewport: { width: 1920, height: 1080 },
      headless: false, // true = hide screen, false = show screen
      timeout: 60000, // 60 seconds
    });

    // The browser automatically opens a page, so use that
    const page = (await browser.pages())[0];
    await page.goto('https://example.com/');

    var XPath = "//h1/text()";//       //'div.product-briefing > div > div > div > span';
    // //await page.waitForSelector(selector);
    await page.waitForXPath(XPath);
    let result = await page.evaluate(element => {
        console.log(element);                     //log in browser
        console.log(typeof element);               //log in browser
        console.log(JSON.stringify(element));      //log in browser
        return element;
    }, (await page.$x(XPath))[0]);

    console.log(result);                          //log in terminal

    await page.waitFor(100000);

    await browser.close();
  })()
  .then(() => {
    console.log('Browser scans complete!');
  })

Почему результат не тот? это журнал результатов в браузере enter image description here и в терминале enter image description here

1 Ответ

1 голос
/ 27 мая 2020

Согласно документации, различные функции eval могут передавать только сериализуемые данные (грубо говоря, данные JSON могут обрабатывать с некоторыми дополнениями). Ваш код возвращает элемент DOM ( текстовый узел ), который не может быть сериализован (у него есть методы и циклические ссылки). Попробуйте получить данные в контексте браузера и вернуть только сериализуемые данные. Например:

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