Lumipat ka mula sa raw HTTP tungo sa tunay na browser. TLS fingerprint: tunay na sa Chrome. IP: residential. At alam pa rin ng site. Sa 2026, ang headless browser detection ay lumampas na nang husto sa navigator.webdriver — ang kasalukuyang henerasyon ng checks ay nakakatukoy sa automation protocol mismo, at karamihan ng "stealth" plugins ay nagpa-patch ng kahaponang signals habang malakas na ipinapakita ang ngayong signals.
Mina-map ng artikulong ito kung ano ang aktwal na sinusuri ngayon ng mga site, halos sa pagkakasunod-sunod ng pagsusuri, at kung ano ang tunay na nakakatulong sa bawat layer. Kinukumpleto nito ang detection trilogy kasama ang JA3/JA4 TLS fingerprinting (network layer) at IP reputation & ASN (address layer) — ito ang browser layer.
navigator.webdriver — spec-required na maging true sa ilalim ng automation. Itinatago ito ng Playwright/Puppeteer stealth setups; hinahawakan ito ng --disable-blink-features=AutomationControlled ng Chrome nang native. Sinusuri pa rin ito ng mga site dahil libre ito at nahuhuli ang mga naive na bot.HeadlessChrome/ sa User-Agent. Naayos ng bagong headless mode (headless=new), na gumagamit ng tunay na Chrome binary path.navigator.plugins, walang chrome.runtime, 0×0 outerWidth. Lahat ng ito ay nabigo sa lumang headless mode; karamihan ay pumapasa sa bagong headless.Kung sinusuri lang ng target ang Tier 1, dumadaan ang modernong Playwright na may headless=new. Lumampas na ang mga seryosong target dito ilang taon na ang nakalipas.
Pinapatakbo ng Playwright at Puppeteer ang Chrome sa pamamagitan ng Chrome DevTools Protocol, at nag-iiwan ang CDP ng runtime side effects na maaaring obserbahan ng page JavaScript:
// The classic CDP leak: serialization callbacks
const err = new Error();
Object.defineProperty(err, "stack", {
get() {
// This getter fires DURING console serialization -
// which only happens when DevTools/CDP is attached
window.__cdp_detected = true;
},
});
console.debug(err);
Ang mga variant nito — getter side effects sa panahon ng console serialization, timing anomalies sa Runtime.evaluate, ang pag-uugali ng toString() sa patched native functions — ay nasa bawat commercial anti-bot bundle. Ang mahalagang punto: tinutukoy nito ang protocol, hindi ang headless mode. Ang headed, stealth-patched, perpektong-mukhang-tao na Chrome ay nabibigo pa rin kung pinapatakbo ito sa pamamagitan ng CDP.
Ano ang nakakatulong:
Higit pa sa artifacts, sinusuri ng modernong systems kung ang kuwento ng iyong browser ay internally consistent:
| Check | Bot tell |
|---|---|
| Canvas / WebGL render hash | SwiftShader/llvmpipe software rendering = server GPU; o hash na ibinabahagi ng 10,000 "iba't ibang user" |
| Fonts & codecs | Linux server font set sa ilalim ng Windows User-Agent |
| Timezone × locale × IP geo | Sabi ng Intl UTC, sabi ng IP Texas, sabi ng Accept-Language de-DE |
| Screen metrics | 1920×1080 na walang taskbar, devicePixelRatio eksaktong 1, window na hindi kailanman ni-resize |
| Hardware concurrency / memory | 96 cores na nire-report sa page na nag-aangking telepono |
| Behavioral micro-signals | Walang mouse entropy, agarang form fills, scrolls sa magkaparehong 100px na hakbang |
Dito namamatay ang DIY stealth: bawat patch na ina-apply mo ay dapat sumang-ayon sa bawat ibang signal. Ang spoofed na Windows UA sa Linux container ay sumasalungat sa fonts, GPU strings, at TCP fingerprints nang sabay-sabay. Nananalo ang coherence kaysa perfection — ang tapat na headed Linux Chrome ay mas mataas ang score kaysa sa masamang-spoof na "Windows".
Walang halaga ang lahat ng ito kung sunog na ang address layer: ang walang-kapintasang browser sa datacenter ASN ay "walang-kapintasang browser pa rin sa datacenter" — at ang headless detection thresholds ay adaptive sa IP reputation. Ang parehong browser ay nakakakuha ng mas maraming JavaScript challenges mula sa naka-flag na IP. Ang residential exits ay epektibong nagpapababa sa scrutiny na dapat makaligtasan ng browser layer:
browser = p.chromium.launch(
headless=False, # headed survives more checks
args=["--disable-blink-features=AutomationControlled"],
proxy={
"server": "us.jibaoproxy.com:913",
"username": "USERNAME", "password": "PASSWORD",
},
)
toString() ay isa nang signal. Nananalo ang mas kaunti at coherent na patches.Residential IPs na tumutugma sa kuwentong sinasabi ng iyong fingerprint — 500MB ng libreng traffic, walang card kailangan.
Simulan ang Libreng TrialAng mga bagong user ay makakatanggap ng 500MB sa pagrehistro, kasama ang bonus sa unang recharge. Limitadong oras lang ang alok.