state and persists across calls.123456789101112131415161718192021222324state.requests = [] state.responses = [] state.page.on('request', req => { if (req.url().includes('/api/')) { state.requests.push({ url: req.url(), method: req.method(), headers: req.headers() }) } }) state.page.on('response', async res => { if (res.url().includes('/api/')) { try { state.responses.push({ url: res.url(), status: res.status(), body: await res.json() }) } catch {} } })
123await state.page.click('button.load-more') // Wait for network activity await state.page.waitForTimeout(2000)
12console.log('Captured', state.responses.length, 'API calls') state.responses.forEach(r => console.log(r.status, r.url.slice(0, 80)))
12const resp = state.responses.find(r => r.url.includes('users')) console.log(JSON.stringify(resp.body, null, 2).slice(0, 2000))
123456const { url, headers } = state.requests.find(r => r.url.includes('feed')) const data = await state.page.evaluate(async ({ url, headers }) => { const res = await fetch(url, { headers }) return res.json() }, { url, headers }) console.log(data)
1234const data = await state.page.evaluate(async url => { const resp = await fetch(url) return await resp.text() }, 'https://example.com/protected/resource')
12345const cdp = await getCDPSession({ page: state.page }) const { cookies } = await cdp.send('Network.getCookies', { urls: [state.page.url()] }) console.log(cookies)
12345678910const cdp = await getCDPSession({ page: state.page }) const { cookies } = await cdp.send('Network.getCookies', { urls: ['https://example.com', 'https://www.example.com'] }) for (const cookie of cookies) { await cdp.send('Network.deleteCookies', { name: cookie.name, domain: cookie.domain }) }
Network.clearBrowserCookies. It's a profile-wide destructive operation that wipes ALL cookies across every domain. It will log the user out of Gmail, GitHub, and everything else.12state.page.removeAllListeners('request') state.page.removeAllListeners('response')
12345const [download] = await Promise.all([ state.page.waitForEvent('download'), state.page.click('button.download') ]) await download.saveAs(`/absolute/path/${download.suggestedFilename()}`)
123456789await state.page.evaluate(async url => { const resp = await fetch(url) const data = await resp.text() const blob = new Blob([data], { type: 'application/octet-stream' }) const a = document.createElement('a') a.href = URL.createObjectURL(blob) a.download = 'data.json' a.click() }, 'https://example.com/protected/large-file')