Scrapling: three fetchers, 900 MB of install, and one Cloudflare page that opened
Published
Ten pages, five engines, same hour. Plain HTTP took 787 ms median at 54 MB. The browser tiers cost 200 MB, and real Chrome peaked at 1.8 GB. Only the stealth tier passed the Cloudflare demo, in 10 s.
Scrapling is a Python scraping library with three engines behind one import: HTTP with a spoofed TLS fingerprint, a browser tier, and a stealth tier. Its README claims it bypasses every kind of Cloudflare interstitial. It also claims saved selectors survive redesigns.
We ran all three against the same ten pages as our earlier moli-versus-Chrome round, in the same hour. Then we counted what came back.
1.Result
| Engine | Pages with real content | Median time | Peak memory |
|---|---|---|---|
| Scrapling HTTP tier | 10 / 10 | 787 ms | 54 MB |
| Scrapling browser tier | 10 / 10 | 5,544 ms | 209 MB |
| Scrapling stealth tier | 10 / 10 | 4,534 ms | 199 MB |
| moli 1.1.13 | 9 / 10 | 984 ms | 168 MB |
| Chrome 154 headless | 9 / 10 | 2,572 ms | 1,807 MB |
HTTP tier, ten pages
787 ms
54 MB peak, no browser process: the cheapest tier that answered all ten
Browser tier, ten pages
5,544 ms
209 MB peak against 1,807 MB for Chrome on the same ten pages
Chrome 154 headless
1,807 MB
Peak memory over the whole process tree, 9 of 10 pages with content
Cloudflare demo page
334 B (still blocked)
The plain browser tier waited 63 s for the block page; the stealth tier opened it in 10.1 s
| Page | HTTP tier | Browser tier | moli | Chrome |
|---|---|---|---|---|
| crates.io/crates/tokio | 32 B (title only) | 7,568 B | 0 B (silent fail) | 7,568 B |
| reddit.com/r/rust | 143 B (blocked) | 26,434 B | 9,146 B (partial) | 143 B (blocked) |
| nopecha Cloudflare demo | 16 B (Just a moment) | 334 B (still blocked) | not run | not run |
Decision
- Use the HTTP tier first
- It answered all ten pages at 787 ms median and 54 MB. It started no browser.
- For plain pages that is 36x less memory than Chrome
- Pay for the browser tier only when the page needs it
- crates.io and reddit returned 32 B and 143 B over HTTP. Through Chromium the same two pages returned 7,568 B and 26,434 B.
- It costs 209 MB, not 1.8 GB
- Skip it if you already have a local fetch binary
- moli matched the HTTP tier on speed (984 ms median) and used 168 MB.
- It returned 0 bytes on crates.io with exit code 0, so never trust one engine
- Expect 900 MB of install
- The 24-package install is 334 MB. The browsers the library downloads add 566 MB.
- The MCP (Model Context Protocol) server needs an extra that [fetchers] does not pull in
2.Claims we checked
| Claim | What we measured | Verdict |
|---|---|---|
| Bypasses Cloudflare interstitials | stealth tier with solve_cloudflare opened the demo page in 10.1 s (1,590 B). The HTTP tier got 16 B. The plain browser tier waited 63 s for the same block page | Held, only on the stealth tier |
| Selectors survive redesigns | With the README snippet alone, 0 of 2 saved elements were found again. The library reported a top score of 39.17% against its own default 40% threshold | Held at threshold 38, missed at the default |
| Impersonates Chrome fingerprints | JA4 (a TLS fingerprint format) t13d1516h2_8daaf6152771_806a8c22fdea against this Mac’s Chrome t13d1517h2_8daaf6152771_cb7bf5808d99 and curl t13d497h2_0d8feac7bc37_7395dae3b2f3 | Chrome-like, not identical |
Details worth knowing
- Same engine, different result. Our own Chrome got the reddit block page (143 B); Scrapling’s browser tier got 26,434 B of the same site. The difference is fingerprint and headers, not Chromium.
- Time spikes are real. The BBC news page took 192 ms over HTTP, 63 s through the stealth tier and 47.7 s through the browser tier.
- Only 15 open issues against 85,821 stars, and no release assets. You install from PyPI or Docker, never from a download.
- Imports are cheap (0.01 s for the package, 0.2 s for the fetchers). The cost appears later, when a browser starts.
Not tested
- The MCP server never ran: scrapling mcp raises ModuleNotFoundError: No module named mcp until the extra that provides it is installed.
- No spider or crawl run, so the claim about crawling at scale (“blazing fast crawls with real-time stats”) is the project’s, not ours.
- One Cloudflare demo page, not “all types”; a heavier challenge or a login wall would need its own round.
Evidence: docs/analysis/2026-10-06-scrapling-three-fetchers.jsonl (86 rows). It holds per-page results for all five engines, peak process-tree memory, TLS fingerprints, and both adaptive tests including the SDK warning. It also holds the Cloudflare demo and the failures. Those were Chrome 154 printing the DOM without exiting, a reused Chrome profile returning empty pages at rc=21, and moli returning 0 bytes with exit code 0. Method: run on this Mac on 6 Oct 2026 against the same ten URLs as the earlier moli-versus-Chrome round, with moli 1.1.13 and Chrome 154.0.8037.93. Scripts are kept under ~/.hermes/cache/scratch/scrapling/.