Playwright で Chromium 系ブラウザのサイトデータ (Cookieとか) の保存を無効化する

ChromeDriver とか Selenium なら pref で profile.default_content_setting_values.cookies を 2 にしたらいいのだが、Playwright はそれを指定できない。

のでどうするかと言うと、プロファイルを保存するディレクトリを事前に作って設定ファイルを書いてから Playwright に渡す。

import { chromium } from "playwright-core"
import { mkdir, mkdtemp, writeFile, rm } from "node:fs/promises"
import assert from "node:assert"
import { join } from "node:path"
import { tmpdir } from "node:os"

const profileDir = await mkdtemp(join(tmpdir(), "playwright-chromium-datadir"))
await mkdir(`${profileDir}/Default`)
await writeFile(`${profileDir}/Default/Preferences`, JSON.stringify({
  profile: {
    default_content_setting_values: {
      cookies: 2,
    },
  },
}))

const context = await chromium.launchPersistentContext(profileDir, {
  channel: "chrome",
})

try {
  const page = await context.newPage()
  await page.goto("https://example.com/")
  await page.waitForLoadState("load")
  await page.evaluate(() => document.cookie = "a=b")
  // Cookie の保存が無効化されているので document.cookie が空になる
  assert.strictEqual(await page.evaluate(() => document.cookie), "")
} finally {
  // ディレクトリを外部から渡した場合は Playwright が後始末をしてくれないので自分でする
  await context.close().finally(() => rm(profileDir, { recursive: true }))
}

後始末をしないとゴミファイルが残ることに注意。