Не удается получить имя с веб-страницы с помощью puppeteer

#node.js #web-scraping #puppeteer

#node.js #очистка веб-страницы #puppeteer

Вопрос:

Я создал скрипт в node сочетании с puppeteer для извлечения имени, которое заполняется при заполнении входных данных на веб-странице. Вот как вы можете получить это имя — после открытия этой веб-страницы поставьте 16803 рядом с CP Number и нажмите search кнопку.

Мой следующий скрипт может успешно заполнить входные данные и заполнить имя нажатием кнопки поиска. Чего я не могу сделать, так это получить имя результата. Селектор, который я определил, безупречен. Я хотел бы получить имя на лету, не используя return.

Я пытался до сих пор:

 const puppeteer = require("puppeteer");
const url = "https://www.icsi.in/student/Members/MemberSearch.aspx";

(async () => {
    const browser = await puppeteer.launch({headless:false});
    const [page] = await browser.pages();
    await page.goto(url, {waitUntil: 'networkidle2'});
    await page.type('input[name="dnn$ctr410$MemberSearch$txtCpNumber"]', '16803');
    await page.click('a#dnn_ctr410_MemberSearch_btnSearch');
    await page.waitFor('.name_head > span');
    await page.evaluate(async () => {
        const elem = document.querySelector('.name_head > span').innerText;
        console.log(elem);
    });
    await page.close();
})();
  

Приведенный выше скрипт выдает мне пустой вывод.

Как я могу получить имя с этого сайта?

Комментарии:

1. Вы, вероятно, хотите вернуть elem и запустить консоль. войдите с узла (а не из браузера)

Ответ №1:

.evaluate скрипт будет запущен внутри браузера. Вам нужно выполнить одно из следующих действий,

Вернитесь и запишите его снаружи

В большинстве случаев это ваш предполагаемый вариант. Вы захотите получить имя и использовать его позже. Вы можете вернуть значение или JSHandle.

 const elemText = await page.evaluate(async () => document.querySelector('.name_head > span').innerText);
console.log(elemText);
  

Включить console с помощью dumpio

При запуске браузера используйте dumpio: true как опцию. Это передаст стандартные параметры процесса браузера и stderr в process.stdout и process.stderr. По умолчанию используется значение false.

 puppeteer.launch({dumpio:true})
  

Включить console с помощью page.on('console')

 page.on('console', msg => console.log('PAGE LOG:', msg.text()));
  

Следите за консолью браузера самостоятельно

Запустите браузер с помощью headless: false и devtools: true , вы можете сами просмотреть журналы.

 puppeteer.launch({ headless: false, devtools: true })