[{"data":1,"prerenderedAt":100},["ShallowReactive",2],{"$fgQg5jxbCZDNf1CeW4hZOcYs33wo2AOSPT6DFvp97hr4":3},{"title":4,"date":5,"dateModified":6,"datePublished":7,"dateModifiedISO":7,"image":8,"content":9,"faq":10,"metaTitle":39,"metaDescription":40,"author":41,"authorBio":6,"authorLinkedin":6,"authorTitle":6,"authorPhoto":42,"lastReviewed":6,"noindex":43,"researchBasis":6,"category":44,"readingTime":45,"related":46,"prev":63,"next":64,"toc":65,"takeaways":94},"Playwright vs Akamai Bot Manager: Why the Browser Is the Wrong Layer (2026)","13 Oct 2026",null,"2026-10-13","/img/news/playwright-akamai-bot-manager-2026.png","\u003Cp>\u003Cstrong>Vanilla Playwright does not clear Akamai Bot Manager.\u003C/strong> A patched Chromium build gets you to roughly three-quarters, and a plain HTTP client with the right TLS handshake beats it outright for about a quarter of the compute.\u003C/p>\n\u003Cp>That last part is the counter-intuitive bit, and it is specific to Akamai. On Cloudflare, a stealth browser is the right answer. On Akamai it usually is not, because the two vendors rank their signals in a different order — and the signal Akamai ranks first is the one Playwright has no control over.\u003C/p>\n\u003Ch2 id=\"choose-before-you-read\">Choose Before You Read\u003C/h2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Your situation\u003C/th>\n\u003Cth>Do this\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Playwright is blocked on an Akamai catalogue or product page\u003C/td>\n\u003Ctd>\u003Ca href=\"#when-to-drop-the-browser-entirely\">Drop the browser, fix the TLS handshake\u003C/a>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>The Akamai target is behind a login or a cart\u003C/td>\n\u003Ctd>Keep the browser; add \u003Ca href=\"#session-warm-up-and-bezier-paths-what-actually-helped\">warm-up and motion\u003C/a>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>You are on vanilla Playwright and have changed nothing yet\u003C/td>\n\u003Ctd>Switch to \u003Ca href=\"/blogs/what-is-patchright-guide-2026\">Patchright\u003C/a> first — it is one import line\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>You are on datacentre proxies\u003C/td>\n\u003Ctd>Fix that before anything else; it caps every row in the table below\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>You are not sure the WAF is Akamai\u003C/td>\n\u003Ctd>\u003Ca href=\"#is-it-akamai-cloudflare-or-perimeterx\">Confirm it first\u003C/a> — the fix is different per vendor\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>You want the rows, not a stealth stack\u003C/td>\n\u003Ctd>\u003Ca href=\"#when-stealth-stops-being-a-library-decision\">Skip to the last section\u003C/a>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Caside class=\"article__usecase-card\">\u003Cdiv class=\"article__usecase-label\">Related use case\u003C/div>\u003Ch3 class=\"article__usecase-title\">Any-site data scraper\u003C/h3>\u003Cp class=\"article__usecase-blurb\">No-code extraction from any website. Managed infrastructure, no anti-bot headaches.\u003C/p>\u003Ca class=\"article__usecase-link\" href=\"/use-cases/data-scraper\">See how it works →\u003C/a>\u003C/aside>\u003Ch2 id=\"what-we-measured\">What We Measured\u003C/h2>\n\u003Cp>April 2026, 500 requests per approach over six hours against production sites running Bot Manager v4, through a residential pool of 2M+ IPs. The full method and the per-signal breakdown are in \u003Ca href=\"/blogs/bypass-akamai-bot-manager-web-scraping-2026\">bypassing Akamai Bot Manager\u003C/a>; what follows is the Playwright-relevant slice.\u003C/p>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Approach\u003C/th>\n\u003Cth>Akamai v4 pass rate\u003C/th>\n\u003Cth>Relative compute cost\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Requests library + datacentre proxies\u003C/td>\n\u003Ctd>22%\u003C/td>\n\u003Ctd>Lowest\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Camoufox + datacentre proxies\u003C/td>\n\u003Ctd>68%\u003C/td>\n\u003Ctd>High\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>curl-cffi + datacentre proxies\u003C/td>\n\u003Ctd>71%\u003C/td>\n\u003Ctd>Low\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>Patchright + residential proxies\u003C/strong>\u003C/td>\n\u003Ctd>\u003Cstrong>74%\u003C/strong>\u003C/td>\n\u003Ctd>\u003Cstrong>High\u003C/strong>\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Camoufox + residential proxies\u003C/td>\n\u003Ctd>83%\u003C/td>\n\u003Ctd>Highest\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>\u003Cstrong>curl-cffi + residential proxies\u003C/strong>\u003C/td>\n\u003Ctd>\u003Cstrong>87%\u003C/strong>\u003C/td>\n\u003Ctd>\u003Cstrong>Low\u003C/strong>\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Cp>Two rows matter here. Patched Playwright on residential IPs reaches 74%. A socket-level HTTP client on the same IPs reaches 87% — thirteen points higher, with no browser process at all. At 10,000 pages a day the compute gap between those two rows is about 4:1.\u003C/p>\n\u003Cp>Vanilla Playwright is not in the table because it is not an approach, it is the control. It announces itself over the DevTools Protocol and gets refused.\u003C/p>\n\u003Ch2 id=\"why-akamai-specifically-punishes-a-browser\">Why Akamai Specifically Punishes a Browser\u003C/h2>\n\u003Cp>Akamai evaluates in this order:\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>TLS fingerprint (JA3/JA4)\u003C/strong> — the handshake, before a single byte of your page runs\u003C/li>\n\u003Cli>\u003Cstrong>IP reputation\u003C/strong> — ASN, history, whether the range is a known cloud provider\u003C/li>\n\u003Cli>\u003Cstrong>JavaScript telemetry\u003C/strong> — the \u003Ccode>sensor_data\u003C/code> payload, validated server-side\u003C/li>\n\u003Cli>\u003Cstrong>Behavioural biometrics\u003C/strong> — mouse paths, scroll events, dwell time\u003C/li>\n\u003Cli>\u003Cstrong>Session continuity\u003C/strong> — whether this &quot;new&quot; session behaves like one\u003C/li>\n\u003C/ol>\n\u003Cp>Layer 1 is the problem. A \u003Ca href=\"https://github.com/salesforce/ja3\">JA3\u003C/a> or \u003Ca href=\"https://github.com/FoxIO-LLC/ja4\">JA4\u003C/a> fingerprint is a hash of what your client offers during the TLS handshake: cipher suites, extensions, elliptic curves, the order they appear in. It is decided by the TLS library compiled into your binary, and it is read before any JavaScript executes.\u003C/p>\n\u003Cp>\u003Cstrong>Playwright cannot change it.\u003C/strong> There is no launch argument, no context option and no stealth plugin that rewrites the handshake, because the handshake is not Playwright&#39;s — it belongs to the Chromium build underneath. A patched Chromium ships a handshake closer to real Chrome, which is exactly why Patchright scores better than vanilla. But &quot;closer to real Chrome&quot; is a fixed property of the build you installed, not a dial you turn per target.\u003C/p>\n\u003Cp>So on a vendor that checks the handshake first, you are spending 200MB and a full page render to influence layers 3 through 5 while layer 1 decides the outcome. That is the whole asymmetry.\u003C/p>\n\u003Cp>On Cloudflare the ordering is effectively reversed — JavaScript challenges carry more weight, which is why \u003Ca href=\"/blogs/playwright-stealth-2026\">a stealth browser wins there\u003C/a> and loses here.\u003C/p>\n\u003Caside class=\"article__inline-cta\">\u003Cp class=\"article__inline-cta-text\">Try ScrapeWise on your own URL. \u003Cstrong>Your first 5 requests are free.\u003C/strong>\u003C/p>\u003Ca class=\"article__inline-cta-btn\" href=\"https://portal.scrapewise.ai/register\" target=\"_blank\" rel=\"noopener\">Start Free →\u003C/a>\u003C/aside>\u003Ch2 id=\"is-it-akamai-cloudflare-or-perimeterx\">Is It Akamai, Cloudflare or PerimeterX?\u003C/h2>\n\u003Cp>Worth thirty seconds, because the correct fix differs per vendor and people routinely apply the Cloudflare playbook to an Akamai target.\u003C/p>\n\u003Cul>\n\u003Cli>An \u003Ccode>_abck\u003C/code> cookie in the response\u003C/li>\n\u003Cli>A \u003Ccode>sensor_data\u003C/code> POST going out from the page\u003C/li>\n\u003Cli>\u003Ccode>Server: AkamaiGHost\u003C/code> in the response headers\u003C/li>\n\u003Cli>A \u003Ccode>bm_sz\u003C/code> cookie, which confirms Bot Manager rather than plain Akamai CDN\u003C/li>\n\u003C/ul>\n\u003Cp>If you see Turnstile or \u003Ccode>cf_clearance\u003C/code> instead, you are on Cloudflare — \u003Ca href=\"/blogs/bypass-cloudflare-akamai-perimeterx-web-scraping-2026\">different post\u003C/a>. If you see \u003Ccode>_px\u003C/code> cookies, it is \u003Ca href=\"/blogs/bypass-perimeterx-human-web-scraping-2026\">PerimeterX\u003C/a>, where every approach we tested hit a ceiling around two-thirds.\u003C/p>\n\u003Cp>Among European retail, Zara, H&amp;M, MediaMarkt and Fnac all run Akamai in front of their catalogues.\u003C/p>\n\u003Ch2 id=\"session-warm-up-and-bezier-paths-what-actually-helped\">Session Warm-Up and Bezier Paths: What Actually Helped\u003C/h2>\n\u003Cp>If you are keeping the browser — and for authenticated flows you should — these did more than any library swap.\u003C/p>\n\u003Cp>\u003Cstrong>Session warm-up: 61% to 83%.\u003C/strong> Akamai&#39;s session-continuity layer scores a brand-new session that navigates straight to a high-value URL. Two or three ordinary page loads with real dwell time in between, before you touch the target, was the single largest gain we measured.\u003C/p>\n\u003Cdiv class=\"code-block\">\u003Cbutton type=\"button\" class=\"code-block__copy\" data-copy-code aria-label=\"Copy code\">Copy\u003C/button>\u003Cpre>\u003Ccode class=\"language-javascript\">const { chromium } = require(&#39;patchright&#39;)\n\nconst jitter = (min, max) =&gt; new Promise(r =&gt; setTimeout(r, min + Math.random() * (max - min)))\n\nconst browser = await chromium.launch({ headless: true })\nconst context = await browser.newContext({ locale: &#39;de-DE&#39;, timezoneId: &#39;Europe/Berlin&#39; })\nconst page = await context.newPage()\n\n// Warm-up: land shallow, dwell, browse inward. The _abck cookie matures across these.\nfor (const path of [&#39;/&#39;, &#39;/damen&#39;, &#39;/damen/kleider&#39;]) {\n  await page.goto(`https://example-retailer.de${path}`, { waitUntil: &#39;domcontentloaded&#39; })\n  await jitter(1800, 4200)\n}\n\n// Only now the page you actually came for.\nawait page.goto(targetUrl, { waitUntil: &#39;domcontentloaded&#39; })\n\u003C/code>\u003C/pre>\u003C/div>\n\u003Cp>\u003Cstrong>Bezier mouse paths: +11 points.\u003C/strong> A straight-line \u003Ccode>mouse.move()\u003C/code> is a signature no human produces. Interpolating along a cubic bezier with a variable step count was worth eleven percentage points over the linear default. Note what this means in practice: you are now writing and maintaining a motion simulator, which is engineering work with no end date.\u003C/p>\n\u003Cp>And the one that is not optional: \u003Cstrong>jitter, not sleep.\u003C/strong> A fixed \u003Ccode>waitForTimeout(1000)\u003C/code> between requests is itself a fingerprint. Randomise across 300–2,500ms.\u003C/p>\n\u003Cp>What did \u003Cem>not\u003C/em> help: rotating user-agent strings, overriding \u003Ccode>navigator.webdriver\u003C/code> from JavaScript after load (detectable — a rewritten property descriptor is visible to an \u003Ccode>Object.defineProperty\u003C/code> guard), and \u003Ccode>playwright-extra\u003C/code>, which is effectively unmaintained and should not start new work.\u003C/p>\n\u003Ch2 id=\"when-to-drop-the-browser-entirely\">When to Drop the Browser Entirely\u003C/h2>\n\u003Cp>For any Akamai page that renders its data server-side — catalogue listings, product pages, search results — the browser is pure overhead. You pay for Chromium to influence the layers Akamai weighs least, while losing on the layer it weighs most.\u003C/p>\n\u003Cp>A client built on \u003Ca href=\"https://github.com/lwthiker/curl-impersonate\">curl-impersonate\u003C/a>, such as \u003Ca href=\"https://pypi.org/project/curl-cffi/\">curl_cffi\u003C/a>, replays a real browser&#39;s TLS handshake at the socket level. In our tests that one change took the HTTP path from 22% to 71% on datacentre IPs, and to 87% on residential. Full walkthrough: \u003Ca href=\"/blogs/curl-cffi-tls-fingerprint-web-scraping-2026\">TLS fingerprint impersonation with curl_cffi\u003C/a>.\u003C/p>\n\u003Cp>Keep the browser when:\u003C/p>\n\u003Cul>\n\u003Cli>The page genuinely renders client-side and the data is not in the HTML\u003C/li>\n\u003Cli>You are behind a login, a cart or a checkout — Akamai&#39;s session tracking is strongest here, and a browser is the realistic way to hold a session\u003C/li>\n\u003Cli>You need to interact: a size selector, a store-availability lookup, a &quot;load more&quot; button\u003C/li>\n\u003C/ul>\n\u003Cp>Drop it when the markup already contains what you came for. Checking takes one request.\u003C/p>\n\u003Ch2 id=\"what-this-costs-to-keep-alive\">What This Costs to Keep Alive\u003C/h2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Approach\u003C/th>\n\u003Cth>Monthly infra at 10k pages/day\u003C/th>\n\u003Cth>Engineering maintenance\u003C/th>\n\u003C/tr>\n\u003C/thead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>curl-cffi + residential proxies\u003C/td>\n\u003Ctd>~$120–180\u003C/td>\n\u003Ctd>3–5 hrs/month\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Patchright + residential proxies\u003C/td>\n\u003Ctd>~$380–520\u003C/td>\n\u003Ctd>8–12 hrs/month\u003C/td>\n\u003C/tr>\n\u003Ctr>\n\u003Ctd>Camoufox + residential proxies\u003C/td>\n\u003Ctd>~$440–600\u003C/td>\n\u003Ctd>10–15 hrs/month\u003C/td>\n\u003C/tr>\n\u003C/tbody>\u003C/table>\n\u003Cp>The maintenance column is the one that gets underestimated. \u003Ca href=\"https://www.akamai.com/products/bot-manager\">Akamai\u003C/a> ships sensor-script changes roughly monthly, and each one can drop a pass rate by 15–30 points overnight. Your scraper does not break loudly; it starts returning fewer rows, and somebody notices a week later in a report.\u003C/p>\n\u003Ch2 id=\"when-stealth-stops-being-a-library-decision\">When Stealth Stops Being a Library Decision\u003C/h2>\n\u003Cp>The honest arc of an Akamai project is: vanilla Playwright blocked → Patchright passes → volume rises → rate-limited → residential proxies added → behavioural scoring catches the timing → you are writing a mouse-movement simulator. Step six is where teams discover this was never a library choice.\u003C/p>\n\u003Cp>If what you need is \u003Cstrong>competitor prices, stock levels and product data arriving in your systems\u003C/strong> rather than a stealth stack to keep alive, the Playwright-versus-Akamai question is the wrong one to be answering. \u003Ca href=\"/\">ScrapeWise\u003C/a> runs the browsers, the proxies and the challenge handling and delivers structured rows. No plan and no compute units: a balance you top up, and a published charge per delivered page — EUR 0.15 per 1,000 for plain requests, EUR 0.75 with rendering, EUR 1.50 through the residential tier and EUR 3.75 for render plus residential. New accounts get 5 free requests and the balance never expires.\u003C/p>\n\u003Cp>You can also call \u003Ca href=\"/scrapers\">ready-made scraping API endpoints\u003C/a> directly, or see how this feeds \u003Ca href=\"/use-cases/competitor-price-tracking\">competitor price tracking\u003C/a>.\u003C/p>\n\u003Ch2 id=\"so-what-should-you-run\">So What Should You Run?\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Patched Playwright, warmed up, with motion\u003C/strong> — the Akamai target is behind a login or a cart and you need to hold a session.\u003C/li>\n\u003Cli>\u003Cstrong>An HTTP client with TLS impersonation\u003C/strong> — the data is in the HTML. 87% against 74%, at a quarter of the compute.\u003C/li>\n\u003Cli>\u003Cstrong>\u003Ca href=\"/blogs/camoufox-vs-patchright-2026\">Camoufox\u003C/a>\u003C/strong> — high-value, low-frequency pages where 42 seconds each is acceptable. It wins on Cloudflare, not on Akamai.\u003C/li>\n\u003Cli>\u003Cstrong>Vanilla \u003Ca href=\"https://playwright.dev/\">Playwright\u003C/a>\u003C/strong> — tests, and targets with no WAF. Never this one against Bot Manager.\u003C/li>\n\u003Cli>\u003Cstrong>None of the above\u003C/strong> — you want delivered rows on a schedule and would rather not maintain any of it.\u003C/li>\n\u003C/ul>\n\u003Cp>\u003Ca href=\"/pricing\">See pricing\u003C/a>.\u003C/p>\n",{"title":11,"description":12,"badge":13,"benefits":14},"Frequently asked questions","Why Playwright is blocked by Akamai Bot Manager, the measured pass rates for patched browsers against a plain HTTP client, and when to keep the browser anyway","FAQ",[15,18,21,24,27,30,33,36],{"title":16,"description":17},"Can Playwright bypass Akamai Bot Manager?","Vanilla Playwright does not. It announces itself over the Chrome DevTools Protocol and gets refused. A patched Chromium build — Patchright — reached 74% against Bot Manager v4 on residential proxies in our April 2026 tests, which is the realistic ceiling for the Playwright family. On the same targets a plain HTTP client with TLS impersonation reached 87% with no browser process at all, so on Akamai specifically the browser is usually the wrong layer.",{"title":19,"description":20},"Why does Playwright fail on Akamai when it works on other sites?","Akamai evaluates in a particular order: TLS fingerprint first, then IP reputation, then the JavaScript sensor_data payload, then behavioural biometrics, then session continuity. The first layer is the problem. A JA3 or JA4 fingerprint is a hash of what your client offers during the TLS handshake, and it is read before a single byte of your page runs. Playwright cannot change it — there is no launch argument, context option or stealth plugin that rewrites the handshake, because the handshake belongs to the Chromium build underneath, not to your script. Cloudflare weights JavaScript challenges more heavily, which is why a stealth browser wins there and loses here.",{"title":22,"description":23},"How do you confirm a site is running Akamai Bot Manager?","Look for an _abck cookie in the response, a sensor_data POST going out from the page, Server: AkamaiGHost in the response headers, and a bm_sz cookie, which confirms Bot Manager rather than plain Akamai CDN. If you see Turnstile or cf_clearance instead you are on Cloudflare, and if you see _px cookies it is PerimeterX. The correct fix differs per vendor, so it is worth the thirty seconds — applying the Cloudflare playbook to an Akamai target is a common and expensive mistake. Among European retail, Zara, H&M, MediaMarkt and Fnac all run Akamai in front of their catalogues.",{"title":25,"description":26},"What actually improved Playwright's Akamai pass rate?","Two changes did more than any library swap. A session warm-up took pass rates from 61% to 83%: Akamai's session-continuity layer scores a brand-new session that navigates straight to a high-value URL, so two or three ordinary page loads with real dwell time before touching the target was the largest single gain we measured. Bezier mouse paths were worth a further 11 percentage points over straight-line mouse.move() calls. Jitter rather than a fixed sleep is not optional — randomise request intervals across 300 to 2,500ms, because a metronome is itself a fingerprint. What did not help: rotating user-agent strings, overriding navigator.webdriver from JavaScript after load, and playwright-extra.",{"title":28,"description":29},"When should you keep the browser on an Akamai target?","Keep it when the page genuinely renders client-side and the data is not in the HTML, when you are behind a login, a cart or a checkout where Akamai's session tracking is strongest and a browser is the realistic way to hold a session, or when you need to interact with a size selector, a store-availability lookup or a load-more button. Drop it when the markup already contains what you came for — for catalogue listings, product pages and search results the browser is pure overhead, and checking takes one request.",{"title":31,"description":32},"What does a Playwright-based Akamai scraper cost to run?","At 10,000 pages a day we measured roughly $380 to $520 a month in infrastructure for Patchright plus residential proxies, against roughly $120 to $180 for an HTTP client with TLS impersonation — about a 4:1 compute gap for a lower pass rate. The maintenance column is the one that gets underestimated: 8 to 12 engineering hours a month for the patched-browser route against 3 to 5 for the HTTP route. Akamai ships sensor-script changes roughly monthly and each one can drop a pass rate by 15 to 30 points, and the failure is quiet — the scraper returns fewer rows rather than erroring, and somebody notices a week later in a report.",{"title":34,"description":35},"Is Camoufox better than Playwright against Akamai?","Marginally, at a higher cost. Camoufox reached 83% on residential proxies against Bot Manager v4 versus Patchright's 74%, but it averages 42.49 seconds to clear a challenge and carries the highest compute cost of anything we tested. That trade is right for high-value, low-frequency pages and wrong for a daily catalogue crawl. Camoufox's real advantage is on Cloudflare, where its patched Firefox TLS signature is treated differently from Chromium-based tools, not on Akamai.",{"title":37,"description":38},"When does stealth stop being a library decision?","The honest arc of an Akamai project is: vanilla Playwright blocked, Patchright passes, volume rises, rate-limiting starts, residential proxies are added, behavioural scoring catches the request timing, and now you are writing and maintaining a mouse-movement simulator. That last step is where teams discover this was never a library choice. If what you need is competitor prices, stock levels and product data arriving in your systems rather than a stealth stack to keep alive, ScrapeWise runs the browsers, proxies and challenge handling and delivers structured rows from EUR 0.15 per 1,000 delivered pages, with 5 free requests on every new account.","Playwright + Akamai Bot Manager: Measured Pass Rates 2026","Vanilla Playwright does not clear Akamai Bot Manager v4. Patched Playwright reaches 74% on residential proxies. A plain HTTP client reaches 87% for a quarter of the compute. The measurements and the reason.","Siim Brazier","/img/team/siim.jpg",false,"Scraping",7,[47,52,57],{"slug":48,"title":49,"image":50,"date":5,"category":44,"excerpt":51},"curl-cffi-tls-fingerprint-web-scraping-2026","curl_cffi and TLS Fingerprint Impersonation for Web Scraping (2026)","/img/news/curl-cffi-tls-fingerprint-web-scraping-2026.png","Your requests call is blocked before any JavaScript runs, because its TLS handshake is not a browser's. What JA3/JA4 is, how curl_cffi fixes it, measured pass rates, and the four cases where it cannot help.",{"slug":53,"title":54,"image":55,"date":5,"category":44,"excerpt":56},"what-is-patchright-guide-2026","What Is Patchright? The Reference Guide (2026)","/img/news/what-is-patchright-guide-2026.png","Patchright is Playwright with the headless tells patched out of the Chromium build. What it patches, how to install it in Python and Node, and the four things it cannot do.",{"slug":58,"title":59,"image":60,"date":61,"category":44,"excerpt":62},"build-web-scraper-with-claude-mcp-2026","Build a Web Scraper with Claude and MCP: A Step-by-Step Walkthrough","/img/news/build-web-scraper-with-claude-mcp-2026.png","30 Sep 2026","Connect Claude to Scrapewise through MCP and let it build, test and run price scrapers for you. The setup, the prompts and the guardrails we use.",{"slug":53,"title":54},{"slug":48,"title":49},[66,70,73,76,79,82,85,88,91],{"level":67,"text":68,"id":69},2,"Choose Before You Read","choose-before-you-read",{"level":67,"text":71,"id":72},"What We Measured","what-we-measured",{"level":67,"text":74,"id":75},"Why Akamai Specifically Punishes a Browser","why-akamai-specifically-punishes-a-browser",{"level":67,"text":77,"id":78},"Is It Akamai, Cloudflare or PerimeterX?","is-it-akamai-cloudflare-or-perimeterx",{"level":67,"text":80,"id":81},"Session Warm-Up and Bezier Paths: What Actually Helped","session-warm-up-and-bezier-paths-what-actually-helped",{"level":67,"text":83,"id":84},"When to Drop the Browser Entirely","when-to-drop-the-browser-entirely",{"level":67,"text":86,"id":87},"What This Costs to Keep Alive","what-this-costs-to-keep-alive",{"level":67,"text":89,"id":90},"When Stealth Stops Being a Library Decision","when-stealth-stops-being-a-library-decision",{"level":67,"text":92,"id":93},"So What Should You Run?","so-what-should-you-run",[95,96,97,98,99],"Vanilla Playwright does not clear Akamai Bot Manager v4. The patched Chromium build (Patchright) reached 74% on residential proxies in our April 2026 tests.","A plain HTTP client with TLS impersonation reached 87% on the same targets, at roughly a quarter of the compute. On Akamai the browser is usually the wrong layer.","Akamai ranks TLS fingerprinting first, which is the one signal Playwright cannot change — the handshake belongs to the Chromium build, not to your script.","The two changes that moved Playwright's numbers most were a session warm-up (61% to 83%) and bezier mouse paths (+11 points), not a different stealth library.","Keep the browser for Akamai-protected flows behind a login or a cart. Drop it for catalogue and price pages.",1791887687150]