Javascript 使用Network.requestIntercepted和Puppeter

Javascript 使用Network.requestIntercepted和Puppeter,javascript,google-chrome-devtools,puppeteer,google-chrome-headless,Javascript,Google Chrome Devtools,Puppeteer,Google Chrome Headless,我正在尝试使用Chrome开发工具网络获取导航/域重定向的URL。请求通过Puppeter拦截了事件,但我似乎无法访问任何事件数据 下面的代码似乎没有触发网络。请求被截获,我不知道为什么 谢谢你的帮助 // console command // node chrome-commands.js http://yahoo.com test var url = process.argv[2]; const puppeteer = require('puppeteer'); puppeteer.la

我正在尝试使用Chrome开发工具
网络获取导航/域重定向的URL。请求通过Puppeter拦截了事件,但我似乎无法访问任何事件数据

下面的代码似乎没有触发网络。请求被截获,我不知道为什么

谢谢你的帮助

// console command
// node chrome-commands.js http://yahoo.com test

var url = process.argv[2];
const puppeteer = require('puppeteer');

puppeteer.launch().then(async browser => {
const page = await browser.newPage();
const client = await page.target().createCDPSession();
await client.send('Network.enable');

await client.on('Network.requestIntercepted', (e) => {
  console.log(e);
  console.log("EVENT INFO: ");
  console.log(e.interceptionId);
  console.log(e.resourceType);
  console.log(e.isNavigationRequest);
});

  await page.goto(url);
  await browser.close();
});
您应该在
网络之前进行配置。请求被拦截
。下面是一个工作示例:

const url = 'http://yahoo.com';
const puppeteer = require('puppeteer');

puppeteer.launch({ userDataDir: './data/' }).then(async browser => {
  const page = await browser.newPage();
  const client = await page.target().createCDPSession();
  await client.send('Network.enable');

  // added configuration
  await client.send('Network.setRequestInterception', {
    patterns: [{ urlPattern: '*' }],
  });

  await client.on('Network.requestIntercepted', async e => {
    console.log('EVENT INFO: ');
    console.log(e.interceptionId);
    console.log(e.resourceType);
    console.log(e.isNavigationRequest);

    // pass all network requests (not part of a question)
    await client.send('Network.continueInterceptedRequest', {
      interceptionId: e.interceptionId,
    });
  });

  await page.goto(url);
  await browser.close();
});

我非常确定
.on()
不会返回承诺,因此您不能
等待
任何东西。我还使用
等待client.on('Network.requestWillBeSent',(e)=>{})同样的方法,效果很好@Tomalak
await
在本例中谢谢,它可以工作了。如果我将
If(!e.isNavigationRequest){return;}
添加到
Network.requestIntercepted
中,它将挂起。你知道为什么吗?你应该在
continueInterceptedRequest
config对象中设置
errorReason:e.isNavigationRequest?未定义:“中止”
@turrican_34我不知道您想要实现什么。但我确信您的代码必须到达
网络。继续InterceptedRequest
并返回,然后才能挂起整个过程。工作:)感谢您的帮助它不是立即挂起的,而是在导航后重定向在应该关闭时检索到的位置。使用
errorReason
,它现在运行良好。