#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 })