无法捕获 playwright 中的 response.json()

fir*_*sto 4 javascript webautomation playwright

我正在尝试使用 playwright 捕获 json 响应。我不断收到待处理的 Promise。但是,在 headless:false 模式下,我可以看到数据正在被接收并填充在浏览器上。我刚刚开始玩Playwright,对《Promise》也不是很熟悉。

我尝试过的如下:

(async () => {
        let browser = await firefox.launch({headless: true, userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'});
        let page = await browser.newPage();
        page.waitForResponse(async(response) => {
            if (response.url().includes('/abcd') && response.status() == 200) {
                let resp = await response.json();
                console.log(resp);
            }
        });
        await page.goto('https://myurl.com', {waitUntil: 'networkidle', timeout: 30000});
        await page.waitForTimeout(20000);
        await browser.close();
})
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我尝试过增加超时时间。没有帮助。

har*_*ded 8

不会waitForResponse处理你的异步函数。你可以这样做:

(async () => {
  let browser = await firefox.launch({headless: true, userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'});
  let page = await browser.newPage();
  const promise page.waitForResponse(/abcd/); // This is a regex to match the url
  await page.goto('https://myurl.com', {waitUntil: 'networkidle', timeout: 30000});
  var response = await promise; // here we wait for the promise to be fullfiled. 
  let resp = await response.json();
  console.log(resp);
  await browser.close();
})
Run Code Online (Sandbox Code Playgroud)