web-dev-qa-db-ja.com

操り人形師:特定の反応を聞く方法は?

私はヘッドレスchrome puppeteerというノードAPIをいじっています。

特定のリクエストレスポンスをリッスンする方法と、結果としてどのように行動するかについて疑問に思っています。

イベントrequestfinishresponseを確認しましたが、これによりallページですでに実行された要求/応答が得られます。

コメント付きの動作を実現するにはどうすればよいですか?

よろしくお願いします!

10
Alex29

1つのオプションは次のとおりです。

  page.on('response', response => {
    if (response.url().endsWith("your/match"))
      console.log("response code: ", response.status());
      // do something here
  });

これでもすべてのリクエストをキャッチしますが、イベントエミッタをフィルタリングして操作することができます。

https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#event-response

16
Reniks

フィルターされた応答(最大11秒待機)の本文は、最初に要求されたJSONとして解析されます[〜#〜] patch [〜#〜]または[〜#〜] post [〜#〜]メソッドを呼び出すたびに:

const finalResponse = await page.waitForResponse(response => 
  response.url() === urlOfRequest 
  && (response.request().method() === 'PATCH' 
  || response.request().method() === 'POST'), 11);
let responseJson = await finalResponse.json();
console.log(responseJson);
0
kirill .z

操り人形師_v1.6.0_(私が推測する)なので、あなたは page.waitForResponse(urlOrPredicate[, options]) を使用できます

ドキュメントからの使用例:

_const firstResponse = await page.waitForResponse('https://example.com/resource');
const finalResponse = await page.waitForResponse(response => response.url() === 'https://example.com' && response.status() === 200);
return finalResponse.ok();
_
0
Ilya Zub

_jest-puppeteer_ を使用して、テストサーバーの特定の応答コードをテストしようとしました。 page.goto()元のリクエストの応答に解決

期待されるときに_404_応答が返されるという簡単なテストを次に示します。

_describe(`missing article page`, () => {
    let response;
    beforeAll(async () => {
        response = await page.goto('http://my-test-server/article/this-article-does-not-exist')
    })
    it('has an 404 response for missing articles', () => {
        expect(response.status()).toEqual(404)
    })

    it('has a footer', async () => {
        await expect(page).toMatch('My expected footer content')
    })
})
_
0
ckeeney