cdpfleet Docs Sign up free

Compare / browsers

Naver Whale vs Chrome

Whale 5.41 runs on Chromium 156, one major behind Chrome 157, names itself in the user agent and client hints, and now sends the same TLS hello as Chrome. What that means for driving it and for how sites see it.

Naver Whale Google Chrome

Naver Whale is Naver's Chromium browser, the one that ships with Naver services in Korea. On the fleet, Whale 5.41.429.3 stable is built on Chromium 156.0.8078.70, while Chrome stable is 157.0.8103.38 — measured the same night, 2026-11-08. Both run headful by default and cost the same two threads. The questions for a scraper: does Whale look like Chrome on the wire, does it hide that it's Whale, and what does running a Chromium major behind cost you? (Measured on 2026-10-17, Whale 5.39 on Chromium 150 was five majors behind and sent its own TLS fingerprint; the jump to 5.41 is in the Whale 5.41 post.)

As a developer: driving them

Naver WhaleGoogle Chrome
Version on the fleetWhale 5.41 stable on Chromium 156. Stable channel only, no pinned versions.Chrome 157 stable on Chromium 157, with beta (158) and dev (159) channels and pinned previous majors (version: 156 and 155).
Launch optionschannel, live_view, screen_size, keep_alive, start_url, record. No cdp (400) and no persistent profile (400 profile_unsupported_engine).The same plus cdp, profile and version.
Playwright featuresMain-world evaluate, console events, init scripts, routing, screenshots, PDF, device emulation, tracing — all work (measured).The same list, all working (measured).
Web platformChromium 156: every feature our probe checks reads the same as on Chrome except four that Chrome 157 added — no Element.prototype.streamAppendHTML, CSS text-decoration-inset, WebTransport.reliability or canvas srgb-linear colour space. The Chromium 151–156 features (iterator helpers, FontFace width, <camera>, CSS margin-trim, symbols(), random()) are all there (measured).Chromium 157: all of the above present (Chrome 157 post; measured).
Privacy SandboxTopics API exposed; Protected Audience (navigator.joinAdInterestGroup) still exposed; no Shared Storage or document.requestStorageAccessFor (measured).Topics API exposed; no Protected Audience (gone in 157), Shared Storage or requestStorageAccessFor (measured).
WebGLWebGL 2.0 on SwiftShader (ANGLE, Vulkan), like Chrome (measured; before 2026-10-17 headful Whale had no WebGL context on the fleet).WebGL 2.0 on SwiftShader (ANGLE, Vulkan), the software renderer of a GPU-less server.

As a scraper: what the site sees

Naver WhaleGoogle Chrome
User agentChrome/156.0.0.0 Whale/5.41.429.3 Safari/537.36 — Whale names itself, with its full version.Chrome/157.0.0.0 … Safari/537.36.
Client hintsBrands Whale 5, Chromium 156, Not/A)Brand 24; full versions 5.41.429.3 and 156.0.8078.70.Brands Not-A.Brand 99, Google Chrome 157, Chromium 157; full version 157.0.8103.38.
TLSJA4 t13d1517h2_8daaf6152771_cb7bf5808d99: 16 ciphers, 19 extensions, peetprint fc97c1cd….Identical JA4 and peetprint. Only JA3 differs, as it does between any two Chromium snapshots, because Chromium shuffles its TLS extension order.
HTTP/2 and headersChromium's SETTINGS and WINDOW_UPDATE (1:65536;2:0;4:6291456;6:262144|15663105); header order sec-ch-ua … user-agent, accept, sec-fetch-*.Identical HTTP/2 fingerprint and header order.
Fingerprint valuesThe machine's own cores, memory and screen; canvas hash 4f88e08a, 5 plugins, en-US, en; the same WebGL renderer as Chrome.Canvas hash f5a94624 — a different canvas hash from Whale's on the same renderer; the same plugins and languages. Neither adds fingerprint randomisation.
Bot checksbot.sannysoft.com: 1 flag, "WebGL Renderer" (SwiftShader on a GPU-less server).The same 1 flag.

Which to pick

Measured on the fleet (2026-11-08)

One headful launch of each through the same proxy, probed from inside a page and via tls.peet.ws, on 2026-11-08.

Launch and cost

Single run; timings depend on the proxy and on fleet load.

Naver WhaleGoogle Chrome
Launch body{"headless":false}{"headless":false}
Threads used2 (linux_headful)2 (linux_headful)
Browser version156.0.8078.70157.0.8103.38
Launch request → browser ready0.7 s0.6 s
Playwright connect0.1 s0.1 s
Load example.com2.7 s1.3 s
Load tls.peet.ws/api/all2.0 s4.0 s

What the network sees

From tls.peet.ws/api/all, requested by the browser itself. JA3 hashes change between runs of the same build (GREASE), so compare JA4 and the HTTP/2 fingerprint.

Naver WhaleGoogle Chrome
HTTP versionh2h2
JA4t13d1517h2_8daaf6152771_cb7bf5808d99t13d1517h2_8daaf6152771_cb7bf5808d99
Peetprint hashfc97c1cdfb1409c9a9326c1b726d1deefc97c1cdfb1409c9a9326c1b726d1dee
Akamai HTTP/2 fingerprint1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p
Cipher suites / extensions16 / 1916 / 19
Header order (first 12)method, authority, scheme, path, sec-ch-ua, sec-ch-ua-mobile, sec-ch-ua-platform, upgrade-insecure-requests, user-agent, accept, sec-fetch-site, sec-fetch-modemethod, authority, scheme, path, sec-ch-ua, sec-ch-ua-mobile, sec-ch-ua-platform, upgrade-insecure-requests, user-agent, accept, sec-fetch-site, sec-fetch-mode

What page scripts see

Read with page.evaluate on example.com. Cores and memory are the server's and vary between fleet nodes.

Naver WhaleGoogle Chrome
navigator.userAgentMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Whale/5.41.429.3 Safari/537.36Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/157.0.0.0 Safari/537.36
UA-CH brandsWhale 5 · Chromium 156 · Not/A)Brand 24Not-A.Brand 99 · Google Chrome 157 · Chromium 157
UA-CH full version listWhale 5.41.429.3 · Chromium 156.0.8078.70 · Not/A)Brand 24.0.0.0Not-A.Brand 99.0.0.0 · Google Chrome 157.0.8103.38 · Chromium 157.0.8103.38
navigator.platform / vendorLinux x86_64 / Google Inc.Linux x86_64 / Google Inc.
Languagesen-US, enen-US, en
Timezone / localeUTC / en-USUTC / en-US
Screen (w×h×availW×availH×depth)1280x720x1280x720x241280x720x1280x720x24
Window outer / inner / DPR1288x805 / 1280x720 / 11288x805 / 1280x720 / 1
hardwareConcurrency / deviceMemory64 / 3264 / 32
WebGL vendorGoogle Inc. (Google)Google Inc. (Google)
WebGL rendererANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)
WebGL versionWebGL 2.0 (OpenGL ES 3.0 Chromium)WebGL 2.0 (OpenGL ES 3.0 Chromium)
WebGPU (navigator.gpu)yesyes
Canvas hash4f88e08af5a94624
navigator.webdrivernono
window.chrome / navigator.connectionyes / yesyes / yes
Plugins / PDF viewer5 / yes5 / yes
Notification.permission / permissions.querydefault / promptdefault / prompt

Web platform features

Presence probes; a user agent that claims one version while exposing another's features is a detectable inconsistency.

Naver WhaleGoogle Chrome
Iterator.prototype.includes (new in Chrome 154)yesyes
FontFace.width (new in Chrome 154)yesyes
CSS text-decoration-inset (Chrome 157)noyes
Iterator.prototype.join (Chrome 153)yesyes
Iterator.zip (Chrome 153)yesyes
CSS scroll-axis-lock (Chrome 153)nono
<camera> element (Chrome 153)yesyes
document.requestStorageAccessFor (deprecated in 153)nono
Topics API (document.browsingTopics)yesyes
Protected Audience (navigator.joinAdInterestGroup)yesno
Shared Storage (window.sharedStorage)nono
Attribution Reporting (window.attributionReporting)nono
Private Aggregationnono
WebHID (navigator.hid)yesyes
CSS margin-trim (Chrome 155)yesyes
CSS text-decoration-skip-spaces (Chrome 155)nono
CSS corner shorthand (listed for Chrome 160)nono
CSS symbols() (Chrome 155)yesyes
Element.streamAppendHTML (Chrome 157)noyes
WebTransport.reliability (on stable from Chrome 157; listed for 158)noyes
window.maximize() — Additional Windowing Controls (Chrome 155)nono
Canvas srgb-linear colour space (on stable from Chrome 157)noyes
Permission policy media-playback-while-not-visible (Chrome 155)yesyes
CSS random() (Chrome 156)yesyes
CSS scroll-snap-type: pair (Chrome 156)yesyes
Fenced frames (window.fence)yesyes
rel=compression-dictionary (Chrome 156 updates)yesyes

bot.sannysoft.com

The classic headless-detection test page; what it marks red.

Naver WhaleGoogle Chrome
Checks / failed57 / 157 / 1
Failed checksWebGL RendererWebGL Renderer

A plain-HTTP URL (http://ip-api.com/json)

Chrome 154 warns before loading insecure HTTP by default — does that reach an automated session?

Naver WhaleGoogle Chrome
Final URLhttp://ip-api.com/json/?fields=statushttp://ip-api.com/json/?fields=status
HTTP status200200
Content loaded / warning page firstyes / noyes / no

Playwright over the remote connection

Which client features work on this side.

Naver WhaleGoogle Chrome
page.evaluate runs in the page's own worldyesyes
addInitScript visible to page scriptsyesyes
Console eventsyesyes
Request interception (page.route)yesyes
Screenshotyesyes
PDFyesyes
Mobile device emulationyesyes
Tracingyesyes

Rows where the two sides differ are highlighted. IP addresses are replaced with placeholders (203.0.113.x). The probe is compare/probe.mjs in our repository; the raw result is below.

Raw output
{
  "ran_at": "2026-11-08T02:23:10.013Z",
  "sides": [
    {
      "label": "Naver Whale",
      "engine": "whale",
      "body": {
        "headless": false
      },
      "launch": {
        "browser": "whale",
        "resource_class": "linux_headful",
        "weight": 2,
        "launch_ms": 658,
        "connect_ms": 139,
        "example_ms": 2745,
        "peet_ms": 1965
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1517h2_8daaf6152771_cb7bf5808d99",
        "ja3_hash": "93264e761b2b1a4a7fb77294f3ed1206",
        "peetprint_hash": "fc97c1cdfb1409c9a9326c1b726d1dee",
        "ciphers": 16,
        "extensions": 19,
        "akamai_h2": "1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p",
        "akamai_h2_hash": "52d84b11737d980aef856699f885ca86",
        "header_order": [
          "method",
          "authority",
          "scheme",
          "path",
          "sec-ch-ua",
          "sec-ch-ua-mobile",
          "sec-ch-ua-platform",
          "upgrade-insecure-requests",
          "user-agent",
          "accept",
          "sec-fetch-site",
          "sec-fetch-mode"
        ]
      },
      "page": {
        "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Whale/5.41.429.3 Safari/537.36",
        "platform": "Linux x86_64",
        "vendor": "Google Inc.",
        "languages": [
          "en-US",
          "en"
        ],
        "hardware_concurrency": 64,
        "device_memory": 32,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 5,
        "pdf_viewer": true,
        "ua_data": {
          "brands": [
            {
              "brand": "Whale",
              "version": "5"
            },
            {
              "brand": "Chromium",
              "version": "156"
            },
            {
              "brand": "Not/A)Brand",
              "version": "24"
            }
          ],
          "mobile": false,
          "platform": "Linux",
          "architecture": "x86",
          "bitness": "64",
          "formFactors": [
            "Desktop"
          ],
          "fullVersionList": [
            {
              "brand": "Whale",
              "version": "5.41.429.3"
            },
            {
              "brand": "Chromium",
              "version": "156.0.8078.70"
            },
            {
              "brand": "Not/A)Brand",
              "version": "24.0.0.0"
            }
          ],
          "model": "",
          "platformVersion": "",
          "uaFullVersion": "5.41.429.3",
          "wow64": false
        },
        "screen": "1280x720x1280x720x24",
        "window": {
          "outer": "1288x805",
          "inner": "1280x720",
          "dpr": 1
        },
        "timezone": "UTC",
        "locale": "en-US",
        "webgl": {
          "vendor": "Google Inc. (Google)",
          "renderer": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)",
          "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
        },
        "canvas_hash": "4f88e08a",
        "webgpu": true,
        "chrome_object": true,
        "chrome_runtime": false,
        "notification_permission": "default",
        "notification_query": "prompt",
        "has_focus": true,
        "connection_api": true,
        "stack_read_by_debugger": false,
        "features": {
          "iterator_includes": true,
          "iterator_join": true,
          "iterator_zip": true,
          "fontface_width": true,
          "css_text_decoration_inset": false,
          "css_scroll_axis_lock": false,
          "websocket_options_bag": null,
          "camera_element": true,
          "topics_api": true,
          "protected_audience": true,
          "shared_storage": false,
          "attribution_reporting": false,
          "request_storage_access_for": false,
          "webhid": true,
          "private_aggregation": false,
          "css_margin_trim": true,
          "css_text_decoration_skip_spaces": false,
          "css_corner_shorthand": false,
          "css_symbols": true,
          "stream_append_html": false,
          "webtransport_reliability": false,
          "window_maximize": false,
          "canvas_srgb_linear": false,
          "policy_media_playback_while_not_visible": true,
          "css_random": true,
          "css_scroll_snap_pair": true,
          "fenced_frames": true,
          "compression_dictionary": true
        }
      },
      "page_main_world": null,
      "sannysoft": {
        "checks": 57,
        "failed": 1,
        "failed_names": [
          "WebGL Renderer"
        ],
        "passed": 30
      },
      "plain_http": {
        "final_url": "http://ip-api.com/json/?fields=status",
        "status": 200,
        "title": "",
        "loaded": true,
        "warning_page": false,
        "page_text": "{\"status\":\"success\"}"
      },
      "playwright": {
        "evaluate_in_main_world": true,
        "console_events": true,
        "init_script": true,
        "route": true,
        "screenshot": true,
        "pdf": true,
        "mobile_emulation": true,
        "tracing": true
      },
      "browser_version": "156.0.8078.70"
    },
    {
      "label": "Google Chrome",
      "engine": "chrome",
      "body": {
        "headless": false
      },
      "launch": {
        "browser": "chrome",
        "resource_class": "linux_headful",
        "weight": 2,
        "launch_ms": 609,
        "connect_ms": 121,
        "example_ms": 1276,
        "peet_ms": 3994
      },
      "network": {
        "http_version": "h2",
        "ja4": "t13d1517h2_8daaf6152771_cb7bf5808d99",
        "ja3_hash": "48fb16792e44aac3656f2c6417da91f4",
        "peetprint_hash": "fc97c1cdfb1409c9a9326c1b726d1dee",
        "ciphers": 16,
        "extensions": 19,
        "akamai_h2": "1:65536;2:0;4:6291456;6:262144|15663105|0|m,a,s,p",
        "akamai_h2_hash": "52d84b11737d980aef856699f885ca86",
        "header_order": [
          "method",
          "authority",
          "scheme",
          "path",
          "sec-ch-ua",
          "sec-ch-ua-mobile",
          "sec-ch-ua-platform",
          "upgrade-insecure-requests",
          "user-agent",
          "accept",
          "sec-fetch-site",
          "sec-fetch-mode"
        ]
      },
      "page": {
        "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/157.0.0.0 Safari/537.36",
        "platform": "Linux x86_64",
        "vendor": "Google Inc.",
        "languages": [
          "en-US",
          "en"
        ],
        "hardware_concurrency": 64,
        "device_memory": 32,
        "max_touch_points": 0,
        "webdriver": false,
        "plugins": 5,
        "pdf_viewer": true,
        "ua_data": {
          "brands": [
            {
              "brand": "Not-A.Brand",
              "version": "99"
            },
            {
              "brand": "Google Chrome",
              "version": "157"
            },
            {
              "brand": "Chromium",
              "version": "157"
            }
          ],
          "mobile": false,
          "platform": "Linux",
          "architecture": "x86",
          "bitness": "64",
          "formFactors": [
            "Desktop"
          ],
          "fullVersionList": [
            {
              "brand": "Not-A.Brand",
              "version": "99.0.0.0"
            },
            {
              "brand": "Google Chrome",
              "version": "157.0.8103.38"
            },
            {
              "brand": "Chromium",
              "version": "157.0.8103.38"
            }
          ],
          "model": "",
          "platformVersion": "",
          "uaFullVersion": "157.0.8103.38",
          "wow64": false
        },
        "screen": "1280x720x1280x720x24",
        "window": {
          "outer": "1288x805",
          "inner": "1280x720",
          "dpr": 1
        },
        "timezone": "UTC",
        "locale": "en-US",
        "webgl": {
          "vendor": "Google Inc. (Google)",
          "renderer": "ANGLE (Google, Vulkan 1.3.0 (SwiftShader Device (Subzero) (0x0000C0DE)), SwiftShader driver)",
          "version": "WebGL 2.0 (OpenGL ES 3.0 Chromium)"
        },
        "canvas_hash": "f5a94624",
        "webgpu": true,
        "chrome_object": true,
        "chrome_runtime": false,
        "notification_permission": "default",
        "notification_query": "prompt",
        "has_focus": true,
        "connection_api": true,
        "stack_read_by_debugger": false,
        "features": {
          "iterator_includes": true,
          "iterator_join": true,
          "iterator_zip": true,
          "fontface_width": true,
          "css_text_decoration_inset": true,
          "css_scroll_axis_lock": false,
          "websocket_options_bag": null,
          "camera_element": true,
          "topics_api": true,
          "protected_audience": false,
          "shared_storage": false,
          "attribution_reporting": false,
          "request_storage_access_for": false,
          "webhid": true,
          "private_aggregation": false,
          "css_margin_trim": true,
          "css_text_decoration_skip_spaces": false,
          "css_corner_shorthand": false,
          "css_symbols": true,
          "stream_append_html": true,
          "webtransport_reliability": true,
          "window_maximize": false,
          "canvas_srgb_linear": true,
          "policy_media_playback_while_not_visible": true,
          "css_random": true,
          "css_scroll_snap_pair": true,
          "fenced_frames": true,
          "compression_dictionary": true
        }
      },
      "page_main_world": null,
      "sannysoft": {
        "checks": 57,
        "failed": 1,
        "failed_names": [
          "WebGL Renderer"
        ],
        "passed": 30
      },
      "plain_http": {
        "final_url": "http://ip-api.com/json/?fields=status",
        "status": 200,
        "title": "",
        "loaded": true,
        "warning_page": false,
        "page_text": "{\"status\":\"success\"}"
      },
      "playwright": {
        "evaluate_in_main_world": true,
        "console_events": true,
        "init_script": true,
        "route": true,
        "screenshot": true,
        "pdf": true,
        "mobile_emulation": true,
        "tracing": true
      },
      "browser_version": "157.0.8103.38"
    }
  ]
}

Bottom line

Whale is a Chromium browser that tells every site it's Whale in its user agent and client hints, while its TLS hello, HTTP/2 and headers are now the same as Chrome's, on an engine one Chromium major behind.

Both cost the same two threads headful; choose by which browser the site should believe it's talking to — and use Chrome when you need CDP or profiles.