【发布时间】:2021-04-23 17:56:26
【问题描述】:
情况:
这是我想做的:
1) 我加载页面 0。页面 0 包含指向不同页面的可点击链接。我想加载所有这些页面的内容。所以:
2) 点击第一个链接。加载页面 1. 获取数据。返回上一页(第0页)
3) 点击加载页面 2 的第二个链接。等等.. 无限循环,直到所有链接都被点击。
使用我当前的代码,加载第 0 页,然后单击第一个链接并加载第 1 页,然后出现崩溃并显示以下错误:
(node:2629) UnhandledPromiseRejectionWarning: Error: Protocol error (Runtime.callFunctionOn): Execution context was destroyed.
问题:
我做错了什么,如何让我的脚本按照我的预期运行?
代码:
const puppeteer = require('puppeteer');
const fs = require('fs');
let getData = async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('url', { waitUntil: 'networkidle2' });
await page.setViewport({width: ..., height:...});
const result = await page.evaluate(async () => {
let data = [];
let elements = document.querySelector('.items').querySelectorAll('.item');
for (const element of elements) {
element.click();
await new Promise((resolve) => setTimeout(resolve, 2000));
// GETTING THE DATA THEN PUSHING IT INTO THE DATA ARRAY
await page.goBack();
}
return data; // Return our data array
});
browser.close();
return result; // Return the data
};
【问题讨论】:
标签: javascript node.js puppeteer