так вот моя проблема. В следующей функции я хочу получить некоторые данные с веб-сайта с помощью puppeteerjs. Функция ищет продукт на сайте по именам, полученным из базы данных mongodb. Вот мой вопрос. Я хочу пропустить функцию через массив имен, которые я получаю от mongo. Поэтому, если функция выполняется один раз, она запускается снова со следующим именем в массиве, пока в массиве не останется ничего.
async function scrape() {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
await page.goto(dealer);
await page.type('.Search-bar-text-input', arrayOfArticles[i]);
await page.click('.Embedded-search-button')
await page.waitFor('.BuyingOptions-total-price');
const result = await page.evaluate(() => {
let path = '.BuyingOptions-total-price';
let price = document.querySelector(path).innerText;
return price;
});
}
Итак, я изначально хотел просто сделать это с помощью этого:
for (var i = 0, len = arrayOfArticles.length; i < len; i++){
но из того, что я читал, это не работает с асинхронными функциями. Как мне заархивировать то же самое для моей функции?
Я уже пробовал это, но это все еще не сработало, как именно вы это закодируете?
(async () => { for (let i = 0; i < arrayOfArticles.length; i++) await scrape(); })();
вы можете пойти с небольшой модификацией
return page.evaluate(() => {
let path = '.BuyingOptions-total-price';
let price = document.querySelector(path).innerText;
return price;
});
//----------------
(async () => {
for (var i = 0, len = arrayOfArticles.length; i < len; i++){
const result = await scrape(arrayOfArticles[i]);
}
})()
Итак, я обнаружил проблему, что-то не так с базой данных, предоставленный вами код работал как шарм, большое спасибо
that doesnt work with async functions
Конечно, простоawait
при каждом вызовеscrape