Methods
page.cookies()
Gets all cookies visible to a given URL.
Copy
page.cookies(url: string): Promise<Cookie[]>
url: URL to get cookies for (cookies are domain-scoped)
Promise<Cookie[]> - Array of cookie objects
Example:
Copy
const cookies = await page.cookies('https://example.com')
console.log(`Found ${cookies.length} cookies`)
cookies.forEach(cookie => {
console.log(`${cookie.name}: ${cookie.value}`)
})
page.setCookie()
Sets one or more cookies.
Copy
page.setCookie(...cookies: Cookie[]): Promise<void>
cookies: One or more cookie objects to set
Promise<void>
Example:
Copy
await page.setCookie({
name: 'session',
value: 'abc123xyz',
domain: 'example.com',
path: '/',
secure: true,
httpOnly: true
})
// Set multiple cookies
await page.setCookie(
{ name: 'user_id', value: '12345', domain: 'example.com' },
{ name: 'theme', value: 'dark', domain: 'example.com' }
)
Cookie type
Copy
interface Cookie {
name: string // Cookie name
value: string // Cookie value
domain?: string // Domain (e.g., "example.com")
path?: string // Path (e.g., "/")
expires?: number // Expiration timestamp (Unix time)
size?: number // Cookie size in bytes
httpOnly?: boolean // HTTP-only flag
secure?: boolean // Secure flag (HTTPS only)
}
Complete examples
Check authentication status
Copy
async function isLoggedIn(page) {
const cookies = await page.cookies('https://example.com')
const sessionCookie = cookies.find(c => c.name === 'session_token')
if (!sessionCookie) {
return false
}
// Check if cookie is expired
if (sessionCookie.expires && sessionCookie.expires < Date.now() / 1000) {
console.log('Session cookie expired')
return false
}
return true
}
await page.goto('https://example.com')
const authenticated = await isLoggedIn(page)
console.log('Authenticated:', authenticated)
Transfer session between browsers
Copy
// Get cookies from first browser
const browser1 = await client.launch()
const page1 = await browser1.newPage()
await page1.goto('https://example.com/login')
// ... perform login ...
const cookies = await page1.cookies('https://example.com')
console.log('Captured session cookies')
// Transfer to second browser
const browser2 = await client.launch()
const page2 = await browser2.newPage()
await page2.setCookie(...cookies)
await page2.goto('https://example.com/dashboard')
// page2 is now logged in with the same session
console.log('Session transferred to second browser')
Inject authentication cookies
Copy
async function loginWithCookies(page, authToken) {
// Set authentication cookie before navigating
await page.setCookie({
name: 'auth_token',
value: authToken,
domain: 'example.com',
path: '/',
secure: true,
httpOnly: true,
expires: Math.floor(Date.now() / 1000) + 86400 // 24 hours
})
// Navigate - now authenticated
await page.goto('https://example.com/dashboard')
// Verify authentication worked
const pageTitle = await page.evaluate(() => document.title)
console.log('Logged in, page title:', pageTitle)
}
await loginWithCookies(page, 'my-auth-token-xyz')
Save and restore session
Copy
import fs from 'fs/promises'
// Save session
async function saveSession(page, filename) {
const cookies = await page.cookies('https://example.com')
await fs.writeFile(filename, JSON.stringify(cookies, null, 2))
console.log('Session saved to', filename)
}
// Restore session
async function restoreSession(page, filename) {
const cookiesJson = await fs.readFile(filename, 'utf-8')
const cookies = JSON.parse(cookiesJson)
await page.setCookie(...cookies)
console.log('Session restored from', filename)
}
// Usage
await page.goto('https://example.com/login')
// ... perform login ...
await saveSession(page, 'session.json')
// Later, in a new session
await restoreSession(page, 'session.json')
await page.goto('https://example.com/dashboard')
Clear cookies
Copy
async function clearCookies(page, domain) {
const cookies = await page.cookies(`https://${domain}`)
// Delete each cookie by setting expired date
const expiredCookies = cookies.map(cookie => ({
...cookie,
expires: 0 // Expire immediately
}))
await page.setCookie(...expiredCookies)
console.log(`Cleared ${cookies.length} cookies for ${domain}`)
}
await clearCookies(page, 'example.com')
// Verify cookies are cleared
const remaining = await page.cookies('https://example.com')
console.log('Remaining cookies:', remaining.length)
Cookie-based feature flags
Copy
async function enableFeature(page, featureName) {
await page.setCookie({
name: `feature_${featureName}`,
value: 'enabled',
domain: 'example.com',
path: '/'
})
console.log(`Feature "${featureName}" enabled`)
}
async function isFeatureEnabled(page, featureName) {
const cookies = await page.cookies('https://example.com')
const featureCookie = cookies.find(c => c.name === `feature_${featureName}`)
return featureCookie?.value === 'enabled'
}
// Enable dark mode
await enableFeature(page, 'dark_mode')
// Check if enabled
const darkModeEnabled = await isFeatureEnabled(page, 'dark_mode')
console.log('Dark mode:', darkModeEnabled ? 'ON' : 'OFF')
Manage user preferences
Copy
async function setUserPreferences(page, prefs) {
await page.setCookie({
name: 'user_prefs',
value: JSON.stringify(prefs),
domain: 'example.com',
path: '/',
expires: Math.floor(Date.now() / 1000) + (365 * 86400) // 1 year
})
}
async function getUserPreferences(page) {
const cookies = await page.cookies('https://example.com')
const prefsCookie = cookies.find(c => c.name === 'user_prefs')
if (prefsCookie) {
return JSON.parse(prefsCookie.value)
}
return null
}
// Set preferences
await setUserPreferences(page, {
theme: 'dark',
language: 'en',
notifications: true
})
// Read preferences
const prefs = await getUserPreferences(page)
console.log('User preferences:', prefs)
Debug cookie issues
Copy
async function debugCookies(page, url) {
const cookies = await page.cookies(url)
console.log(`\n=== Cookies for ${url} ===`)
console.log(`Total cookies: ${cookies.length}\n`)
cookies.forEach(cookie => {
console.log(`Name: ${cookie.name}`)
console.log(`Value: ${cookie.value}`)
console.log(`Domain: ${cookie.domain}`)
console.log(`Path: ${cookie.path}`)
console.log(`Secure: ${cookie.secure}`)
console.log(`HttpOnly: ${cookie.httpOnly}`)
if (cookie.expires) {
const expiryDate = new Date(cookie.expires * 1000)
const isExpired = expiryDate < new Date()
console.log(`Expires: ${expiryDate.toISOString()} ${isExpired ? '(EXPIRED)' : ''}`)
} else {
console.log('Expires: Session')
}
console.log('---')
})
}
await page.goto('https://example.com')
await debugCookies(page, 'https://example.com')
A/B testing with cookies
Copy
async function assignABTestVariant(page) {
const variant = Math.random() < 0.5 ? 'A' : 'B'
await page.setCookie({
name: 'ab_test_variant',
value: variant,
domain: 'example.com',
path: '/',
expires: Math.floor(Date.now() / 1000) + (30 * 86400) // 30 days
})
console.log('Assigned A/B test variant:', variant)
return variant
}
async function getABTestVariant(page) {
const cookies = await page.cookies('https://example.com')
const variantCookie = cookies.find(c => c.name === 'ab_test_variant')
return variantCookie?.value || null
}
// Assign variant if not already assigned
let variant = await getABTestVariant(page)
if (!variant) {
variant = await assignABTestVariant(page)
}
await page.goto('https://example.com')
console.log('Testing with variant:', variant)
Best practices
Match domain correctly
Match domain correctly
Ensure the URL domain matches the cookie domain:
Copy
// Cookie domain: example.com
const cookies = await page.cookies('https://example.com') // ✓ Correct
const cookies = await page.cookies('https://other.com') // ✗ Won't find it
Set secure cookies for HTTPS
Set secure cookies for HTTPS
Use the
secure flag for cookies on HTTPS sites:Copy
await page.setCookie({
name: 'auth_token',
value: 'secret',
domain: 'example.com',
secure: true, // Only sent over HTTPS
httpOnly: true // Not accessible via JavaScript
})
Check cookie expiration
Check cookie expiration
Verify cookies haven’t expired before using them:
Copy
const sessionCookie = cookies.find(c => c.name === 'session')
if (sessionCookie.expires && sessionCookie.expires < Date.now() / 1000) {
console.log('Cookie expired, need to re-authenticate')
}
Handle missing cookies
Handle missing cookies
Always check if cookies exist before accessing:
Copy
const cookies = await page.cookies('https://example.com')
const authCookie = cookies.find(c => c.name === 'auth')
if (!authCookie) {
console.log('Not authenticated')
// Handle unauthenticated state
}