[英]Cannot print puppeteer response on node.js console
我正在抓取一個網站進行練習,並且正在將Puppeteer用於無頭瀏覽器。 我的問題是在node.js控制台上控制台記錄操縱up的響應。
我的目標是產品中DOM中的父元素,並從每個元素中檢索某些信息。 使用Google開發工具,我所有的querySelector都是正確的,我可以毫無問題地打印所需的數據。 但是,當嘗試打印到我的node.js控制台時,我總是得到一個空白數組作為響應。
const puppeteer = require('puppeteer');
let scrape = async () => {
const masterList = [];
const browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();
await page.goto('https://www.fschumacher.com/catalog/Wallcoverings?sid=0.07316907031133635');
const result = await page.evaluate(() => {
return 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);
});
browser.close();
return masterList;
};
scrape().then((res) => {
console.log(res);
});
我希望在Goggle開發工具中看到的數據會出現在我的node.js控制台上。
問題是[].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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.