Как использовать date. js через Puppeteer exposeFunction? - PullRequest
0 голосов
/ 11 января 2020

Я использую puppeteer 1.19.0 и date.js 0.3.3 для этого примера

const puppeteer = require('puppeteer');
const date = require('date.js');

let scrape = async () => {
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();

    await page.exposeFunction('formatDate', (text) =>
    date(text));

    await page.goto('https://www.daraz.com.bd/products/the-vip-suction-mobile-phone-stand-pocket-size-i113492895-s1030756115.html');
    await page.waitFor(1000);

    const result = await page.evaluate(() => {
        let elements = document.querySelectorAll('#module_product_qna > div.pdp-mod-qna > div:nth-child(2) > ul > li')
        for (var element of elements)
        {
            let question = element.querySelector('div:first-of-type > div.qna-content').innerText;
            let qtime = element.querySelector('div:first-of-type > div.qna-meta').innerText;
            let q = qtime.match(/- (.+)/);
            qtime = formatDate(q[1]);         
            return {
                question,
                qtime             
            }
    }});

    browser.close();
    return result;
};

scrape().then((value) => {
    console.log(value);
});

Вы видите, что я пытаюсь использовать функцию даты date. js библиотека для анализа относительной даты через кукловода exposeFunction , но функция даты не работает в контексте страницы. Любые предложения, что я делаю не так?

Я ценю ваши ответы!

1 Ответ

1 голос
/ 11 января 2020

От кукловода Документы :

Метод добавляет функцию с именем name к объекту window страницы. При вызове функция выполняет puppeteerFunction в node.js и возвращает Обещание, которое преобразуется в возвращаемое значение puppeteerFunction.

Попробуйте это:

const result = await page.evaluate(async() => {
        let elements = document.querySelectorAll('#module_product_qna > div.pdp-mod-qna > div:nth-child(2) > ul > li')
        for (var element of elements)
        {
            let question = element.querySelector('div:first-of-type > div.qna-content').innerText;
            let qtime = element.querySelector('div:first-of-type > div.qna-meta').innerText;
            let q = qtime.match(/- (.+)/);
            qtime = await window.formatDate(q[1]);         
            return {
                question,
                qtime             
            }
    }});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...