Проблема в том, что все, что вы запускаете после [].forEach.call(result, (el) =>{
, выполняется в вашем процессе Node, а не в Chromium. Таким образом, такие вещи, как el.querySelector('.product-thumb')
, не будут работать, поскольку в этот момент вы «отключены» от Chromium.
Хорошая новость заключается в том, что вы можете решить эту проблему, переместив больше кода в сторону Chromium:
const mainResult = await page.evaluate(() => {
const masterList = [];
var result = document.querySelector('.search-results-parent').querySelectorAll('.product-preview');
[].forEach.call(result, (el) =>{
let thumbnail = el.querySelector('.product-thumb')
.querySelector('a')
.querySelector('img')
.src;
let product_info = el.querySelector('.product-info').querySelector('div');
let product_name = product_info.querySelector('a').querySelector('div').innerText;
let product_id = product_info.querySelector('.product-id');
let product_color = product_id.querySelector('.product-color').innerText;
let product_sku = product_id.querySelector('.product-sku').innerText;
let product_price = product_info.querySelector('.product-price')
.querySelector('span')
.innerText;
let whole = {
thumbnail,
product_name,
product_color,
product_sku,
product_price
};
masterList.push(whole);
});
return masterList;
});
browser.close();
return mainResult;