В настоящее время я работаю над проектом очистки веб-страниц, и мне нужно как можно меньше сократить время ожидания. Так как я делаю спокойный API, я хочу запустить кукловод, прежде чем кто-то сделает запрос. Таким образом, я надеюсь, что chrome уже запущен, что потенциально может сэкономить много времени.
Я, однако, не очень опытен с узлом и мог бы использовать некоторую помощь. Приведенный ниже код не работает, но несколько иллюстрирует то, к чему я пытаюсь приблизиться.
const puppeteer = require('puppeteer');
var readlineSync = require('readline-sync');
var x = undefined;
var browser = async () => {
x = await puppeteer.launch();
if (x != null){
resolve(return x);
}
else{
reject(console.log('failed promise'));
}
}
exports.getInfo = (url) => {
return new Promise(async (resolve, reject) => {
const page = await browser.newPage();
await page.goto(url, { waitUntil: 'networkidle2' });
await page.keyboard.press('Escape');
await page.keyboard.press('PageDown');
await page.keyboard.press('PageDown');
await page.waitForXPath("//div[starts-with(@class, 'detail-desc-decorate-')] | //p[starts-with(@class, 'detail-desc-decorate-')] | //div[@id='product-description']//p");
let data = await page.evaluate(() => {
let images = [];
for (i = 0; i < document.querySelectorAll('div.images-view-item > img').length; i++) {
link = document.querySelectorAll('div.images-view-item > img')[i].src;
images[i] = link;
}
var json = JSON.stringify({
title: document.querySelector('div.product-title').innerText,
description: document.querySelector('div[id=product-description]').innerText,
price: document.querySelector('div.product-price-current').innerText,
productOption: document.querySelector('div.product-sku').innerHTML,
//shippingCost: document.querySelector('div.product-shipping-price').innerText,
//deliviryDate: document.querySelector('span.product-shipping-delivery > span').innerText,
mainImage: document.querySelector('img.magnifier-image').src,
images: images
});
return json
})
await browser.close();
if (data != null) {
resolve(console.log('yay'));
} else {
reject(console.log('failed promise'));
}
})
}
browser().then(console.log(x)).catch(console.log('something went horribly wrong'))
Надеюсь, что это в некоторой степени демонстрирует мою цель.