Javascript 在给定request.continue()的循环行为的情况下,如何将每个网络请求存储到数组中?
我试图在访问页面时获取所有网络请求,并将它们存储到数组中 我的代码如下所示:Javascript 在给定request.continue()的循环行为的情况下,如何将每个网络请求存储到数组中?,javascript,google-chrome,google-chrome-headless,puppeteer,Javascript,Google Chrome,Google Chrome Headless,Puppeteer,我试图在访问页面时获取所有网络请求,并将它们存储到数组中 我的代码如下所示: await page.setRequestInterceptionEnabled(true); page.on('request', request => { if(request.url) { var networkRequests = request.url; var networkArray = []; for (var i =
await page.setRequestInterceptionEnabled(true);
page.on('request', request => {
if(request.url) {
var networkRequests = request.url;
var networkArray = [];
for (var i = 0; i < networkRequests; i++) {
networkArray.push(networkRequests[i]);
}
console.log(networkArray);
console.log(typeof networkArray);
request.continue();
} else {
request.abort();
}
});
await page.goto('http://www.example.com', {waitUntil: 'networkidle'});
wait page.setRequestInterceptionEnabled(true);
第页('request',request=>{
if(request.url){
var networkRequests=request.url;
var networkArray=[];
对于(var i=0;i
我发现问题在于请求。continue()
。它为每个获取的请求创建几个迭代,对于每个迭代,它显示该请求并将其作为字符串返回。
这意味着我最终得到了几个字符串
问题是我无法将所有这些字符串插入到一个数组中,因此我可以在最近使用它们。我尝试了几个for循环,但没有成功。同时找到了一个快速修复方法:
const puppeteer = require('puppeteer');
function extractRequests(url) {
return new Promise((resolve, reject) => {
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setRequestInterceptionEnabled(true);
let result = [];
page.on('request', request => {
if (request.url) {
var networkRequests = request.url;
result.push(networkRequests);
request.continue();
} else {
request.abort();
}
});
page.goto(url, {
waitUntil: 'networkidle'
})
.then( _=> setTimeout( _=> resolve(result), 1000));
})();
});
}
extractRequests('http://example.com').then(requests => {
console.log(requests.filter(x => x.includes('event-name') && x.includes('other-event-name')));
process.exit(0);
});
同时找到了一个快速解决方案:
const puppeteer = require('puppeteer');
function extractRequests(url) {
return new Promise((resolve, reject) => {
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setRequestInterceptionEnabled(true);
let result = [];
page.on('request', request => {
if (request.url) {
var networkRequests = request.url;
result.push(networkRequests);
request.continue();
} else {
request.abort();
}
});
page.goto(url, {
waitUntil: 'networkidle'
})
.then( _=> setTimeout( _=> resolve(result), 1000));
})();
});
}
extractRequests('http://example.com').then(requests => {
console.log(requests.filter(x => x.includes('event-name') && x.includes('other-event-name')));
process.exit(0);
});