【发布时间】:2020-01-10 10:08:57
【问题描述】:
我目前正在做一个项目,需要从 carousell.ph 中的搜索结果中抓取数据
我基本上制作了一个示例 HTML 并复制了 carousell 的输出 HTML,到目前为止,javascript 工作正常,除非我尝试使用 puppeteer 迁移它,但它总是给我一个错误。
任务基本上是从搜索网址“https://www.carousell.ph/search/iphone”中获取所有产品列表
这是我编写的代码。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
let url = 'https://www.carousell.ph/search/iphone';
await page.goto(url, {waitUntil: 'load', timeout: 10000});
await page.setViewport({ width: 2195, height: 1093 });
await page.screenshot({ fullPage: true, path: 'carousell.png' });
document.querySelectorAll('main').forEach(main => {
main.querySelectorAll('a').forEach(product => {
const product_details = product.querySelectorAll('p');
const productName = product.textContent;
const productHref = product.getAttribute('href');
console.log(product_details[0].textContent + " - "+ product_details[1].textContent);
});
});
await browser.close()
})()
【问题讨论】:
-
错误是什么?
-
node:8980) UnhandledPromiseRejectionWarning: ReferenceError: 文档未定义 (node:8980) UnhandledPromiseRejectionWarning: 未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。 (拒绝 ID:1)(节点:8980)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
-
如果你想在浏览器中执行代码,你应该使用
evaluate函数。这就是为什么没有定义文档的原因,因为你在节点端。
标签: puppeteer