Typický problém s Puppeteerem je tento: první požadavky projdou, ale později začnou chodit odpovědi 403 nebo 429, vyprší časový limit, nebo se objeví stránka s bezpečnostní výzvou. Přesto mnoho návodů pořád popisuje Rotace proxy jen jako změnu konfigurace na dvě řádky.
Jenže tak to prostě není. Rozdíl mezi ukázkou typu „přidejte přepínač --proxy-server“ a dlouhodobě udržitelným řešením je obrovský. Tento průvodce pokrývá rotaci na úrovni celého prohlížeče, autentizované gatewaye, rozdělení do více instancí nebo externí relaye, konzistentní profily prohlížeče, produkční chybové zpracování a také poctivou odpověď na otázku, kdy proxy vůbec neřešit.
Co je rotující proxy a proč ji Puppeteer potřebuje?
Proxy funguje jako prostředník mezi vaší instancí Puppeteer a webem, který navštěvujete. Cílový web vidí výstupní IP adresu proxy, ne vaši vlastní. Rotující proxy střídá skupinu těchto výstupních IP adres — někdy po každém požadavku, jindy po celé relaci — takže provoz nevypadá jako jeden klient, který server bombarduje tisíci požadavky za sebou.
Puppeteer to potřebuje hlavně proto, že headless Chrome posílající stovky po sobě jdoucích požadavků z jedné IP je přesně ten vzorec, který anti-bot systémy hledají. Oficiální dokumentace Cloudflare popisuje několik detekčních vrstev běžících současně — heuristiky, kontrolu JavaScript fingerprintu, modely strojového učení i detekci behaviorálních anomálií. Rotace IP adresy řeší jen jednu z těchto vrstev. Pouze jednu.
Existují tři typy proxy, které je dobré znát, a nejsou zaměnitelné:
- Datacentrové proxy — levné, rychlé a pocházejí od hostingových providerů. Cílové weby je snadno odhalí, protože ASN (síťový blok) jasně odpovídá datacentru, ne domácí síti.
- Rezidenční proxy — běží přes skutečné spotřebitelské ISP, takže vypadají jako běžné domácí připojení. Jsou pomalejší a dražší, ale působí mnohem věrohodněji.
- Mobilní proxy — IP adresy z mobilních sítí operátorů, obvykle nejdražší varianta, vhodná tehdy, když je skutečně potřeba identita mobilní sítě.
Rezidenční výstupy mohou být podle samotné klasifikace ASN méně nápadné než datacentrové, ale žádná kategorie není imunní vůči blokaci. Neexistuje univerzální míra detekce: výsledky závisí na cílovém webu, reputaci výstupní IP, lokaci, historii relace, profilu prohlížeče a chování požadavků.
Ještě jedno rozlišení, které lidi často mate: statický seznam, který rotujete sami (spravujete pool, vybíráte další IP, řešíte chyby) je něco jiného než backconnect/gateway proxy (vy se připojíte na jeden endpoint a poskytovatel mění výstupní IP na pozadí). Obojí je správně; jen se u nich přesouvá složitost jinam.
Proč nastavovat rotující proxy v Puppeteer? Typické scénáře použití
Upřímná odpověď je: rotaci nejspíš nepotřebujete, dokud ji opravdu nepotřebujete. A pak ji potřebujete hodně.
| Scénář | Proč na rotaci záleží |
|---|---|
| Monitoring cen napříč katalogy produktů | Opakované dotazy na katalog z jedné IP mohou narušit limity a reputační signály |
| Doplňování leadů / extrakce kontaktních dat | Opakované návštěvy profilů z jedné IP vypadají jako scraping, ne běžné prohlížení, a behaviorální systémy je flagují |
| Scraping výsledků vyhledávání | Vyhledávače patří mezi nejagresivnější služby v oblasti throttlingu a CAPTCHA ochrany podle IP |
| Analýza konkurence | Opakované scrapování stejné domény po několik dní buduje fingerprint vázaný na vaši IP a historii cookies |
| Agregace obsahu | Velký objem stránek, ale nízká hodnota jednotlivé stránky — přesně ten typ provozu, na který jsou detekční systémy laděné |
Neexistuje žádné pevné, citovatelné číslo typu „Amazon blokuje na 51. požadavku“. Weby nezveřejňují univerzální prahy a omezení se mohou měnit podle endpointu, stavu účtu, reputace ASN i charakteru provozu. Začněte s nejnižší povolenou rychlostí požadavků, ověřujte nejen status kódy, ale i obsah, a rotaci přidávejte až ve chvíli, kdy měřená chování a podmínky cílového webu dávají smysl.
Tři strategie rotace proxy v Puppeteer: kterou potřebujete?

Tuhle část většina návodů úplně přeskočí, nebo ještě hůř, ukáže jen nejhrubší variantu. Existují tři úrovně granularity a špatná volba buď zbytečně zdrží práci, nebo zkomplikuje jednoduchý úkol.
| Strategie rotace | Granularita | Restartuje se prohlížeč? | Složitost | Nejlepší pro |
|---|---|---|---|---|
Po prohlížeči (--proxy-server) | 1 proxy na jednu instanci prohlížeče | Ano | Nízká | Jednoduché scrape úlohy s malým objemem |
Správa přes gateway (proxy-chain + backconnect endpoint) | Politika poskytovatele / relace | Ne | Střední | Autentizované rotující gatewaye |
| Rozdělení prohlížečů nebo externí relay | 1 proxy na shard prohlížeče nebo pravidlo relay | Ne, neprobíhá výměna v jednom procesu | Vysoká | Řízená souběžnost a jemné směrování |
Ještě jedna rychlá poznámka před výběrem: dokumentace Puppeteer k network interception výslovně říká, že setRequestInterception není čistý přepínač „proxy na každý request“ — každý zachycený požadavek se pozastaví, dokud ho explicitně nepovolíte, neodmítnete nebo neobsloužíte. Skutečné směrování proxy po jednotlivých requestech obvykle znamená posílat provoz přes lokální programovatelnou gateway (například proxy-chain) spíš než přehazovat proxy přímo uvnitř interception handleru. Mějte to na paměti, než se pustíte do Metody 3 níže.
Jak nastavit rotující proxy v Puppeteer: krok za krokem
Obtížnost: Střední
Časová náročnost: přibližně 30–45 minut pro všechny tři metody
Co budete potřebovat: Node.js 18+, npm, seznam proxy nebo účet u providera (formát: protocol://user:pass@host:port) a balíčky puppeteer, proxy-chain a puppeteer-extra
Předpoklady: co připravit předem
Nainstalujte základní balíčky:
npm install puppeteer proxy-chain puppeteer-extra puppeteer-extra-plugin-stealth
Získejte seznam proxy od poskytovatele (pro cokoli víc než běžné testování je lepší rezidenční varianta) nebo aspoň několik testovacích proxy, na kterých si ověříte kód dřív, než na něj pustíte reálný objem požadavků. Přihlašovací údaje ukládejte do proměnných prostředí — nikdy je napevno nepište do kódu ani do URL, která by se mohla dostat do logu.
Metoda 1: Rotace proxy po prohlížeči přes --proxy-server
Tohle je základ, od kterého začíná většina lidí, a z dobrého důvodu — je předvídatelný. Puppeteer LaunchOptions uvádí args jako podporovaný způsob, jak předat přepínače příkazové řádky Chromu, a --proxy-server je nativní přepínač Chromium.
import puppeteer from 'puppeteer';
const proxyPool = [
'http://proxy1.example:8080',
'http://proxy2.example:8080',
'http://proxy3.example:8080',
];
let proxyIndex = 0;
async function scrapeWithRotation(url) {
const proxy = proxyPool[proxyIndex % proxyPool.length];
proxyIndex++;
const browser = await puppeteer.launch({
headless: true,
args: [`--proxy-server=${proxy}`],
});
const page = await browser.newPage();
// Pokud proxy vyžaduje autentizaci, musí to běžet před první navigací
await page.authenticate({
username: process.env.PROXY_USER,
password: process.env.PROXY_PASS,
});
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30_000 });
const content = await page.content();
await browser.close(); // před změnou proxy zavřete browser
return content;
}
Všimněte si, že page.authenticate() podle dokumentace Puppeteer tiše zapíná request interception na pozadí — je to malý výkonový kompromis, ale je dobré o něm vědět, než budete ladit, proč je všechno pomalejší, než čekáte.
Očekávaný výsledek: každé volání spustí nový browser navázaný na jinou proxy. Pro rotaci zavíráte a znovu otevíráte prohlížeč — tomu se nevyhnete. U scrape úlohy na 50 stránek bude toto řešení znatelně pomalejší než další dvě metody, čistě kvůli startu prohlížeče.
Kdy to použít: skripty s nízkou souběžností, jednorázové scrape úlohy, situace, kde je důležitější jednoduché ladění než rychlost.
Metoda 2: Autentizovaná rotující gateway s proxy-chain
Chrome nepřijímá přihlašovací údaje user:pass@host vložené přímo do proxy URL. Balíček proxy-chain (udržovaný společností Apify) tento problém řeší tak, že spustí lokální anonymní proxy, která přeposílá provoz na vaši autentizovanou upstream proxy. Pokud je upstream proxy od providera rotující nebo backconnect gateway, poskytovatel mění výstupní IP za tímto jedním endpointem podle své session politiky. proxy-chain samo o sobě nepřiřazuje jinou proxy každé existující stránce Puppeteer.
import puppeteer from 'puppeteer';
import { anonymizeProxy, closeAnonymizedProxy } from 'proxy-chain';
async function scrapeThroughGateway(upstreamProxyUrl, targetUrl) {
const localProxy = await anonymizeProxy(upstreamProxyUrl);
let browser;
try {
browser = await puppeteer.launch({
headless: true,
args: [`--proxy-server=${localProxy}`],
});
const page = await browser.newPage();
await page.goto(targetUrl, { waitUntil: 'domcontentloaded' });
return await page.content();
} finally {
if (browser) await browser.close();
await closeAnonymizedProxy(localProxy, true); // vždy uklízet
}
}
Blok finally tu není jen pro parádu — osiřelé lokální proxy servery umí okupovat porty a už jsem viděl scrapery, které si přes noc potichu vyčerpaly dostupné file deskriptory, protože nikdo neuzavřel anonymizovanou proxy. proxy-chain navíc vrací konkrétní chybové kódy (593 pro DNS problémy, 594 pro odmítnuté spojení, 597 pro chybu autentizace), což je opravdu užitečné pro klasifikaci chyb — k tomu se ještě vrátíme.
Kdy to použít: autentizované rezidenční/datacentrové gatewaye, kde rotaci řídí endpoint nebo session parametry providera. Pokud potřebujete několik pevných proxy identit současně, použijte oddělené procesy prohlížeče (browser sharding) nebo dedikovaný externí relay; nativní Puppeteer nenabízí podporovaný per-page proxy přepínač.
Metoda 3: Směrování po jednotlivých requestech vyžaduje externí relay
Tohle je varianta s nejjemnější granularitou — teoreticky může každá obrázková, skriptová nebo API request na stránce jít přes jinou výstupní IP. V praxi je to ale nejkřehčí a nejméně zdokumentovaný přístup, protože request interception v Puppeteer vznikl pro filtrování a úpravu požadavků, ne pro přepínání síťové trasy na úrovni každého requestu.
import puppeteer from 'puppeteer';
async function inspectRequests(url) {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.setRequestInterception(true);
page.on('request', async (request) => {
// Ve skutečné praxi vyžaduje opravdové přepínání proxy na každý request
// směrování přes lokální relay (proxy-chain), ne změnu transportu prohlížeče
// za běhu — Chrome to nepodporuje.
// Většina produkčních řešení tenhle handler používá spíš k filtrování/
// blokování typů zdrojů a kombinuje ho s browser shardingem nebo gatewayí.
if (['image', 'font', 'stylesheet'].includes(request.resourceType())) {
request.abort();
} else {
request.continue();
}
});
await page.goto(url, { waitUntil: 'networkidle2' });
await browser.close();
}
Upřímně: skutečné přepínání IP adresy po každém requestu uvnitř Puppeteer není funkcí setRequestInterception(). Pokud takovou granularitu opravdu potřebujete, pošlete Chrome přes programovatelný externí relay nebo použijte scraping framework postavený kolem proxy sessions. Pro většinu projektů je jednodušší provozovat a auditovat jednu proxy na jeden browser shard nebo gateway řízenou poskytovatelem.
Kompletní anti-detection stack: samotná rotace proxy vás před banem nespasí
Častá stížnost zní: „Používám proxy, ale stejně mě blokují.“ IP adresa je jen jeden z několika signálů, které moderní bot systémy vyhodnocují, a rotace IP bez konzistentního zbytku může vytvořit ještě výraznější anomálii. Příkladem je browser, který se tváří jako Windows Chrome, ale jeho client hints, časové pásmo nebo locale ukazují něco úplně jiného.
Vrstva 1: Rotující rezidenční proxy
To už jsme pokryli výše — rezidenční výstupy působí často věrohodněji než datacentrové, ale neexistuje žádná univerzální minimální velikost poolu. Velikost poolu určujte podle reálného objemu požadavků, délky relace, cooldownů a způsobu opakovaného použití u vašeho providera, ne podle libovolného čísla.
Vrstva 2: Stealth plugin pro skrytí signálů headless Chromu
puppeteer-extra-plugin-stealth opravuje řadu známých indikátorů headless režimu: navigator.webdriver, WebGL vendor stringy, chybějící objekty Chrome runtime a několik dalších úniků přes CDP. Jde o opravdu užitečnou kompatibilitní vrstvu, ale README projektu poctivě říká, že je to hra na kočku a myš a úplné obejití detekce asi není možné. Berte ho jako základ, ne jako záruku.
Vrstva 3: Konzistentní profily prohlížeče a rozumné tempo
User-agent musí být vnitřně konzistentní se vším ostatním, co browser hlásí. Chrome User-Agent Client Hints poskytují strukturovaná platformní data, takže ručně napsaný user-agent může odporovat skutečné platformě. Preferujte user agent dodaný přibaleným Chrome buildem, udržujte viewport, locale a timezone v rámci relace stabilní a požadavky rozkládejte opatrně místo vytváření nového fingerprintu pro každou stránku.
Tady jsou všechny tři vrstvy propojené v jedné launch konfiguraci:
import puppeteer from 'puppeteer-extra';
import StealthPlugin from 'puppeteer-extra-plugin-stealth';
import { anonymizeProxy, closeAnonymizedProxy } from 'proxy-chain';
puppeteer.use(StealthPlugin());
function boundedDelay(minMs = 800, maxMs = 1800) {
return new Promise((r) => setTimeout(r, minMs + Math.random() * (maxMs - minMs)));
}
async function stableProfileScrape(targetUrl, upstreamProxy) {
const localProxy = await anonymizeProxy(upstreamProxy);
let browser;
try {
browser = await puppeteer.launch({
headless: true,
args: [`--proxy-server=${localProxy}`, '--lang=en-US'],
});
const page = await browser.newPage();
await page.setViewport({ width: 1366, height: 768 });
await boundedDelay();
await page.goto(targetUrl, { waitUntil: 'domcontentloaded' });
return await page.content();
} finally {
if (browser) await browser.close();
await closeAnonymizedProxy(localProxy, true);
}
}
Tohle je blok, který v jiných návodech většinou vůbec neuvidíte — proxy, stealth a randomizace fingerprintu na jednom místě, připravené ke kopírování a úpravám.
Chybové zpracování a health checky proxy na produkční úrovni

Většina návodů skončí v momentě, kdy funguje happy path. Skutečný scraping ale selhává neustále — proxy odcházejí, vyprší platnost přihlašovacích údajů, cílové weby vás uprostřed běhu začnou rate-limitovat — a nic z toho nevyřeší prosté doufání v nejlepší výsledek.
Retry logika s exponenciálním backoffem a jitterem
function backoffMs(attempt, base = 1000, cap = 30_000) {
const exponential = Math.min(cap, base * 2 ** attempt);
return Math.floor(exponential * (0.5 + Math.random() * 0.5)); // jitter brání thundering herd efektu
}
async function withRetry(fn, maxRetries = 4) {
for (let attempt = 0; attempt <= maxRetries; attempt++) {
try {
return await fn();
} catch (err) {
if (attempt === maxRetries) throw err;
const delay = backoffMs(attempt);
console.warn(`Pokus ${attempt + 1} selhal: ${err.message}. Opakuji za ${delay} ms`);
await new Promise((r) => setTimeout(r, delay));
}
}
}
Automatické blacklisting proxy, které selhávají
const proxyStats = new Map(); // proxyUrl -> { success, failure }
function recordResult(proxyUrl, success) {
const stats = proxyStats.get(proxyUrl) || { success: 0, failure: 0 };
success ? stats.success++ : stats.failure++;
proxyStats.set(proxyUrl, stats);
}
function isHealthy(proxyUrl) {
const stats = proxyStats.get(proxyUrl);
if (!stats) return true;
const total = stats.success + stats.failure;
if (total < 5) return true; // zatím není dost dat
return stats.failure / total < 0.5; // blacklist při chybovosti nad 50 %
}
function getHealthyProxy(pool) {
const healthy = pool.filter(isHealthy);
if (healthy.length === 0) throw new Error('V poolu nezůstaly žádné zdravé proxy');
return healthy[Math.floor(Math.random() * healthy.length)];
}
Sledujte typ chyby, ne jen úspěch/neúspěch — 407 (špatné přihlašovací údaje) a 429 (rate limit) vyžadují úplně odlišnou reakci. Bezhlavé opakování u proxy, která selhává na autentizaci, jen spálí čas; řešením je kontrola přihlašovacích údajů, ne rychlejší rotace.
Řešení běžných chyb rotujících proxy v Puppeteer
| Chyba | Pravděpodobná příčina | Oprava |
|---|---|---|
ERR_PROXY_CONNECTION_FAILED | Proxy je nefunkční nebo nedostupná | Odeberte ji z poolu a zkuste další |
407 Proxy Authentication Required | Špatné přihlašovací údaje nebo nepodporovaná autentizace | Ověřte údaje v page.authenticate(); pro autentizaci v URL použijte proxy-chain |
TimeoutError | Pomalá proxy nebo blokace na straně cíle | Zvyšte timeout; přejděte na rezidenční proxy |
403 Forbidden | IP nebo fingerprint byl označen | Rotujte proxy + zapněte stealth + randomizujte UA |
ERR_TUNNEL_CONNECTION_FAILED | Problém s HTTPS tunelem | Zkontrolujte podporu metody CONNECT; zkuste lokální tunneling přes proxy-chain |
Ještě dvě důležité věci, které se do tabulky nevešly: status kód 200 neznamená automaticky úspěch. Soft blocky často vrací plně vygenerovanou HTML stránku — přihlašovací zeď nebo challenge obrazovku — se standardním status kódem, takže ověřujte skutečný obsah, ne jen status odpovědi. A když se zaseknete, průvodce debuggingem Puppeteer doporučuje spustit headless: false, přidat slowMo a nastavit NODE_DEBUG="puppeteer:*" pro podrobné protokolové logy — jen počítejte s tím, že tyto logy mohou obsahovat citlivá data požadavků, takže je nenechávejte běžet proti produkčním přístupům.
Vlastní správa rotace proxy vs. gateway proxy vs. AI extrakční API
| Kritérium | Vlastní rotace seznamu | Backconnect gateway (Bright Data, Oxylabs, Decodo) | AI extrakční API (Thunderbit) |
|---|---|---|---|
| Náklady při malém objemu | Nízké až střední | Střední až vysoké za GB | Nízké (free tier, pak podle jednotek) |
| Spolehlivost | Závisí na vašich health checkech | Vysoká (spravuje poskytovatel) | Vysoká (spravovaná infrastruktura) |
| Anti-detection | DIY — stavíte sami | Částečně (jen rotace IP) | Vestavěné |
| Strukturovaný výstup | Ne (surové HTML) | Ne (surové HTML) | Ano (JSON podle schématu) |
| Čas na nastavení | Hodiny | Minuty | Minuty |
| Kontrola | Plná | Omezená API poskytovatele | Omezená modelem schématu |
Současné ceny poskytovatelů (kontrolováno 2026-08-07) dobře ukazují cenovou křivku gateway varianty: rezidenční pricing od Bright Data nabízí pay-as-you-go i objemové plány s proměnlivými akcemi; Oxylabs uvádí 6 USD/GB při 5 GB a 2,50 USD/GB při 1 TB; a Decodo (dříve Smartproxy) uvádí 3,75 USD/GB při 3 GB, 2,75 USD/GB při 100 GB a pay-as-you-go za 4 USD/GB. Decodo také inzeruje pool 115M+ IP adres a 99,92% success rate — jde o tvrzení poskytovatele, ne nezávisle ověřený benchmark.
Rozhodovací pravidlo, které skutečně používám: potřebujete na stránce interagovat — klikání, scroll, vyplňování formulářů, udržení přihlášené relace? Pak stavte s Puppeteerem a proxy. Potřebujete jen data, která už na stránce jsou? Než začnete stavět vlastní proxy infrastrukturu, kterou budete udržovat navěky, podívejte se na extrakční API.
Kdy je Puppeteer + proxy zbytečně moc: strukturovaná data přes API
Někdy kolem třetího přepisování systému pro health check proxy u projektu, který potřeboval jen ceny produktů do tabulky, mi došlo: většina téhle infrastruktury existuje kvůli problému — dostat z webu HTML — který ve skutečnosti není cílem vývojáře. Cílem jsou strukturovaná data. HTML je jen otravný meziformát.
Thunderbit Open API bere extrakci jako hlavní operaci, ne jako vedlejší efekt automatizace prohlížeče. POST /extract vezme URL a JSON Schema a vrátí odpovídající strukturovaná data — zpracuje renderování přes JS, anti-bot ochranu i CAPTCHA na backendu, místo abyste si museli sami skládat stealth pluginy a proxy pool:
curl -X POST https://openapi.thunderbit.com/openapi/v1/extract \
-H "Authorization: Bearer $THUNDERBIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product",
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"price": {"type": "number"}
},
"required": ["name", "price"]
}
}'
K dispozici je také endpoint POST /distill pro případy, kdy chcete jen čistý Markdown místo přísného schématu, a také dávková extrakce pro spuštění stejného schématu nad více URL v jednom volání. Podle aktuálního ceníku Thunderbit API stojí Distill 1 jednotku na stránku a Extract 20 jednotek na stránku — free tier obsahuje 600 jednorázových jednotek, což stačí na otestování workflow před tím, než se zavážete.
Pro vývojáře pracující v Claude, Cursor nebo jiném MCP-kompatibilním klientovi Thunderbit nabízí také MCP nástroje thunderbit_extract a thunderbit_distill, takže agent může během úkolu sám rozhodnout, kdy potřebuje data z webu, místo aby vyžadoval samostatný scraping krok. Před napojením na MCP config bych si ale zkontroloval aktuální API reference, protože názvy nástrojů a parametry se mohou mezi verzemi dokumentace měnit.
| Oblast | Puppeteer + rotující proxy | Thunderbit API |
|---|---|---|
| Složitost nastavení | Vysoká — pool proxy, logika rotace, stealth, retry | Nízká — jedno API volání s JSON Schema |
| Anti-bot ochrana | Ručně | Vestavěná |
| Výstup | Surové HTML (nutné parsování) | Strukturovaný JSON odpovídající vašemu schématu |
| Údržba | Vysoká — selektory se lámou, proxy odcházejí | Nízká |
| Nejlepší pro | Vlastní automatizaci, login flow, specifické interakce | Extrakci dat ve velkém měřítku |
Abych byl spravedlivý k DIY přístupu: pokud váš use case zahrnuje přihlášení k účtu, proklikávání více kroků nebo cokoli, co vyžaduje držet stav v rámci relace, extrakční API vás obvykle nenahradí — FAQ Thunderbit otevřeně říká, že interaktivní login flow zatím přes API nepodporuje. Tam pořád vyhrává Puppeteer s proxy. Ale pokud je úkol „dostat data z mnoha veřejných stránek do schématu, které si definují“, stavět vlastní stack na rotaci proxy řeší složitější problém, než ve skutečnosti máte. Pro týmy, které chtějí obejít kód úplně, nabízí Thunderbit Chrome Extension stejnou AI extrakci přes klikací rozhraní — stojí za zvážení, pokud porovnáváte no-code web scraping s plným vývojářským setupem.
Závěr a klíčové poznatky
Rotující proxy v Puppeteer není jedna jediná technika. Rotace po prohlížeči je jednoduchá a izolovaná. Autentizovaná backconnect gateway může měnit výstupní IP za jedním browser-wide endpointem. Jemné směrování po jednotlivých requestech nebo více současných identitách vyžaduje rozdělení prohlížečů nebo externí relay; samotné request interception nemění síťovou trasu Chromu.
Nic z toho ale moc nepomůže bez zbytku stacku. Proxy řeší reputaci IP; stealth pluginy a konzistence fingerprintu řeší signály prohlížeče; jitter a rozumné tempo řeší behaviorální signály. Vynechejte kteroukoli vrstvu a stejně můžete být zablokováni — jen z jiného důvodu.
Pokud si to stavíte sami, začněte s repozitářem proxy-chain a ukázkami kódu výše — dostanou vás dál než většina placených kurzů. Pokud chcete přeskočit správu proxy úplně a dostávat rovnou strukturovaná data, dokumentace Thunderbit API stojí za deset minut vašeho času, než do víkendu vrazíte budování health-check infrastruktury, kterou budete muset pořád udržovat. Obě cesty jsou legitimní — hlavně si ale pohlídejte, že řešíte skutečný problém, ne ten, který předpokládá každý návod. Pro širší pohled na to, jak do tohoto prostoru zasahuje AI, se podívejte na naše hlubší téma AI web scraping a srovnání s tradičními přístupy.
Často kladené otázky
Jak často mám v Puppeteer rotovat proxy?
Záleží na tom, jak agresivní je rate limiting cílového webu. U stránek s tvrdou detekcí botů rotujte po každé stránce nebo po každé relaci. U mírnějších webů může stačit rotace po relaci nebo dokonce jedna sticky IP pro celý běh. Neexistuje univerzální číslo — 403, 429 a timeouty berte jako signál, že máte rotovat agresivněji, ne jako pevně daný počet požadavků.
Můžu pro scraping v Puppeteer použít free proxy?
Technicky ano, ale pro cokoli víc než rychlé testy to nedoporučuji. Bezplatné seznamy proxy bývají pomalé, nespolehlivé a často už dávno zablokované weby, které chcete scrapovat. Pro produkční použití se vyplatí rezidenční proxy od placeného providera nebo spravovaná gateway.
Funguje puppeteer-extra-plugin-stealth proti všem anti-bot systémům?
Ne, a dokumentace pluginu to sama přiznává. Snižuje některé běžné signály headless Chromu, ale cílový web může dál vyhodnocovat reputaci sítě, TLS charakteristiky, cookies, client hints i chování. Berte plugin jako jednu kompatibilitní vrstvu, ne jako záruku.
Jaký je rozdíl mezi proxy-chain a --proxy-server v Puppeteer?
--proxy-server je nativní přepínač Chromium, který přiřadí jeden proxy endpoint celé instanci prohlížeče, a Chrome tam neakceptuje vložené proxy přihlašovací údaje. proxy-chain vytváří lokální anonymní tunel k autentizovanému upstreamu. Rotace pak přichází z nového spuštění s jiným upstreamem, z provider-managed backconnect gateway nebo z externě navrženého relaye — ne z toho, že by proxy-chain přiděloval proxy jednotlivým stránkám Puppeteer.
Stačí rotující proxy k tomu, abych nebyl blokovaný úplně?
Ne — a to je nejčastější omyl. Moderní anti-bot systémy jako Cloudflare bot management korelují reputaci IP s fingerprintem prohlížeče, behaviorálními vzory a historií relace. Proxy řeší část s reputací IP; pořád ale potřebujete stealth nastavení, konzistentní fingerprint a realistické časování, aby vás neodhalily jiné signály.
Zjistit více


