如何在 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 就会丢失。也许是错误,也许是功能。 :( 幸运的是,.launch (args:[ '--user-agent=My Agent']) 对我有用。

以上是关于如何在 Playwright 中添加自定义标题的主要内容,如果未能解决你的问题,请参考以下文章

Playwright JS - 如果找不到元素/选择器,如何全局定义/更改超时?

在 Playwright 中禁用 Javascript

Playwright入门

如何在 Playwright 中使用已安装的 chrome 版本?

如何在 Playwright.js 中检查页面上是不是存在元素

playwright自定义浏览器设备时区经纬度userAgent注入脚本