Skip to main content

Injecting Cookies

Cookie management is essential for maintaining session state, authentication, and personalized user experiences during browser automation. BrowserQL provides powerful cookie injection and extraction capabilities through the cookies mutation, allowing you to set cookies before navigation and retrieve them after page interactions.

The cookies mutation in BrowserQL serves dual purposes:

  • Setting cookies: Pass an array of CookieInput objects to inject cookies into the browser
  • Getting cookies: Call without parameters to retrieve all cookies from the current page

When setting cookies, use the CookieInput type with the following properties:

  • name (required): Cookie name
  • value (required): Cookie value
  • domain: Cookie domain (e.g., "example.com")
  • path: Cookie path (defaults to "/")
  • secure: Boolean indicating if cookie requires HTTPS
  • httpOnly: Boolean for HTTP-only cookies
  • sameSite: Cookie SameSite policy (Strict, Lax, or None)
  • expires: Expiration timestamp (session cookie if not set)
  • url: Request URI to associate with the cookie

The mutation returns a CookieResponse containing:

  • cookies: Array of StandardCookie objects with name, value, domain, path, and security properties
  • time: Execution time in milliseconds

Here's a comprehensive example demonstrating cookie injection and extraction using the test site setcookie.net:

mutation cookies {
setCookies: cookies(cookies: [
{
name: "test_cookie"
value: "123456"
domain: "setcookie.net"
path: "/"
secure: true
}
]) {
cookies {
name
value
}
}
waitForTimeout(time: 3000) {
time
}
goto(url: "https://setcookie.net/", waitUntil: networkIdle) {
status
}

getCookies: cookies {
cookies {
name
value
domain
path
secure
}
}
}

Common Use Cases

Authentication Cookies

Set authentication cookies before navigating to protected pages:

mutation setAuthCookie {
cookies(cookies: [
{
name: "session_token"
value: "abc123xyz789"
domain: "example.com"
path: "/"
secure: true
httpOnly: true
}
]) {
cookies {
name
value
}
}
goto(url: "https://example.com/dashboard") {
status
}
}

Preference Cookies

Inject user preference cookies to customize page behavior:

mutation setPreferences {
cookies(cookies: [
{
name: "theme"
value: "dark"
domain: "example.com"
},
{
name: "language"
value: "en-US"
domain: "example.com"
}
]) {
cookies {
name
value
}
}
}

Retrieve cookies after user interactions to analyze session data:

mutation extractCookies {
goto(url: "https://example.com/login") {
status
}
type(selector: "#username", text: "user@example.com") {
time
}
type(selector: "#password", text: "password123") {
time
}
click(selector: "#login-button") {
time
}
waitForSelector(selector: ".dashboard") {
time
}

cookies {
cookies {
name
value
domain
expires
secure
httpOnly
}
}
}

Cookie management in BrowserQL provides the foundation for sophisticated session handling, enabling seamless automation of authenticated workflows and personalized user experiences.