Я написал сценарий на node.js
для удаления links
различных заголовков с веб-страницы.Когда я выполняю свой следующий скрипт, я получаю undefined
, напечатанный на консоли вместо links
, который я ищу.Мои определенные селекторы точны.
Я не хочу помещать links
в массив и возвращать результаты;скорее, я хочу напечатать их на лету.Поскольку я очень новичок в написании сценариев, использующих node.js
в сочетании с puppeteer
, я не могу понять, какую ошибку я совершаю.
Это мой сценарий ( Ссылка на этоsite ):
const puppeteer = require('puppeteer');
function run () {
return new Promise(async (resolve, reject) => {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("https://stackoverflow.com/questions/tagged/web-scraping");
let url = await page.evaluate(() => {
let items = document.querySelectorAll('a.question-hyperlink');
items.forEach((item) => {
//would like to keep the following line intact
console.log(item.getAttribute('href'));
});
})
browser.close();
return resolve(url);
} catch (e) {
return reject(e);
}
})
}
run().then(console.log).catch(console.error);
Следующий скрипт прекрасно работает, если я решу объявить пустой массив results
, сохранить в нем очищенные ссылки и, наконец, вернуть results
, ноЯ не хочу идти так.Я хотел бы придерживаться того, что я попробовал выше, как при печати результата на лету.
const puppeteer = require('puppeteer');
function run () {
return new Promise(async (resolve, reject) => {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto("https://stackoverflow.com/questions/tagged/web-scraping");
let urls = await page.evaluate(() => {
let results = [];
let items = document.querySelectorAll('a.question-hyperlink');
items.forEach((item) => {
results.push({
url: item.getAttribute('href'),
});
});
return results;
})
browser.close();
return resolve(urls);
} catch (e) {
return reject(e);
}
})
}
run().then(console.log).catch(console.error);
Еще раз: мой вопрос, как я могу напечататьссылка типа console.log(item.getAttribute('href'));
на лету без сохранения ее в массиве?