我试图通过Puppeteer请求拦截在每个请求上设置cookie。我注意到,设置headers['sample-header']=1
会创建标头'sample-header'等于1,设置headers['cookie'] = x...
不会设置请求cookie。例如,以下代码未设置任何请求cookie。
const browser = await puppeteer.launch({headless: false,executablePath:dirnae});
const page = await browser.newPage();
const client = await page.target().createCDPSession();
await page.setRequestInterception(true);
page.on('request', request => {
const headers = request.headers();
headers['cookie'] = 1;
request.continue({ headers });
});
page.on('request', request => {
console.log(request.headers())
});
page.on('response', response => {
//console.log(response.headers()['set-cookie'])
});
await page.goto('https://google.com');
编辑:我发现通过处理Network.requestWillBeSentExtraInfo
事件可以看到请求cookie标头。
但是,我似乎无法在该事件中编辑请求。
答案 0 :(得分:-1)
您不能更改每个网络请求的cookie。您可以使用 page.setCookie 并为不同的URL或域提供cookie。下面是供参考的代码:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
var cookies = [
{
"name": "sample-cookie1",
"value": "1",
"domain": "stackoverflow.com"
},
{
"name": "sample-cookie2",
"value": "2",
"domain": "pptr.dev"
}
];
await page.setCookie(...cookies);
await page.goto("https://pptr.dev");
console.log(await page.cookies()); //this will have the **sample-cookie2** cookie
await page.goto("https://stackoverflow.com");
console.log(await page.cookies()); //this will have the **sample-cookie1** cookie
})();