我在测试应用程序中使用puppeteer评估网页的基于javascript的HTML。
这是我用来确保所有数据都已加载的行:
await page.setRequestInterception(true);
page.on("request", (request) => {
if (request.resourceType() === "image" || request.resourceType() === "font" || request.resourceType() === "media") {
console.log("Request intercepted! ", request.url(), request.resourceType());
request.abort();
} else {
request.continue();
}
});
try {
await page.goto(url, { waitUntil: ['networkidle0', 'load'], timeout: requestCounterMaxWaitMs });
} catch (e) {
}
这是等待ajax请求完成的最佳方法吗?
感觉不错,但是我不确定是否应该使用networkidle0,networkidle1等?
您可以使用prepare-xhr-puppeteer,这是一个公开承诺的库,等待所有待处理的xhr请求得到解决。
像这样使用它:
const puppeteer = require('puppeteer');
const { PendingXHR } = require('pending-xhr-puppeteer');
const browser = await puppeteer.launch({
headless: true,
args,
});
const page = await browser.newPage();
const pendingXHR = new PendingXHR(page);
await page.goto(`http://page-with-xhr`);
// Here all xhr requests are not finished
await pendingXHR.waitForAllXhrFinished();
// Here all xhr requests are finished
免责声明:我是pending-xhr-puppeteer的维护者
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句