如何在 Playwright 中添加自定义标题
Posted
技术标签:
【中文标题】如何在 Playwright 中添加自定义标题【英文标题】:How to add custom headers in Playwright 【发布时间】:2020-10-17 16:27:40 【问题描述】:headers["user-agent"] = fakeUa();
console.log(fakeUa())
let firstReq = true;
page.route('**/*', route =>
const request = route.request()
//console.log(request.url(), JSON.stringify(request.headers()));
if("x-j3popqvx-a" in request.headers())
headers = request.headers();
//console.log(headers);
console.log("exiting");
return;
else
console.log("in");
return route.continue(headers: headers);
);
let pageRes = await page.goto(url, waitUntil: 'load', timeout: 0);
我想在向 url 发送请求时添加假用户代理。但它不会添加假用户代理,而是使用默认用户代理。
【问题讨论】:
【参考方案1】:虽然在puppeteer 中可以使用page.setUserAgent()
方法应用自定义UA 和page.setExtraHTTPHeaders()
设置任何自定义标题,但在playwright 中您可以设置自定义用户代理(@987654330 @) 和标题 (extraHTTPHeaders
) 作为 browser.newPage()
或 browser.newContext()
的选项,例如:
const page = await browser.newPage( userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/83.0.4103.116 Safari/537.36' )
const page = await browser.newPage( extraHTTPHeaders: 'Cache-Control': 'no-cache' )
编辑:如果您将它与newContext()
一起使用,用法如下所示(确保在newContext
的设置中设置userAgent
而不是newPage
!):
const context = await browser.newContext( userAgent: 'hello' )
const page = await context.newPage()
// to check the UA:
console.log(await page.evaluate(() => navigator.userAgent))
【讨论】:
请解释一下剧作家的语境概念?BrowserContext
是一种新的浏览器会话,在剧作家中比在 puppeteer 中更强调,特别是因为它有助于多浏览器/多设备执行。您可以在文档中阅读有关其概念的更多信息 here 和 here
.newPage( userAgent: fakeUa())。这就是我设置标题的方式,但是一旦满足条件并且代码退出并且我打印标题它们与默认值相同
如果您使用的是context
,请确保在newContext()
而不是newPage
中设置userAgent
选项。更高级别定义了用户代理。如果您有BrowserContext
并且您在两者中都设置了UA,那么您可以对其进行测试,哪一个将在标题中。请参阅上面的编辑。
请注意:如果 userAgent 使用 newContext() 或 newPage 设置,它会一直工作,直到您在页面上。一旦使用了 next goto(),userAgent 就会丢失。也许是错误,也许是功能。 :( 幸运的是,以上是关于如何在 Playwright 中添加自定义标题的主要内容,如果未能解决你的问题,请参考以下文章
Playwright JS - 如果找不到元素/选择器,如何全局定义/更改超时?
如何在 Playwright 中使用已安装的 chrome 版本?