gpt4 book ai didi

javascript - 无法在 node.js 控制台上打印 puppeteer 响应

转载 作者:行者123 更新时间:2023-12-02 23:28:01 26 4
gpt4 key购买 nike

我正在抓取一个网站进行练习,并且正在使用 Puppeteer 作为 headless 浏览器。我的问题是控制台在 Node.js 控制台上记录 puppeteer 响应。

我将产品的 DOM 中的父元素作为目标,并从每个元素中检索某些信息。使用 Google Dev Tools,我的所有查询选择器都是正确的,我可以毫无问题地打印我想要的数据。但是,当尝试打印到我的 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 Dev Tools 中看到的数据出现在我的 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;

关于javascript - 无法在 node.js 控制台上打印 puppeteer 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56644080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com