Скрейпер работает на первом запуске. На третьем появляются 403, пустые ответы или бесконечная CAPTCHA. Код не менялся. Сайт тоже. Anti-bot система собрала профиль сессии и начала блокировать.
TL;DR: большинство блокировок возникает в четырех слоях: сеть, browser identity, поведение и session state. Начинайте с anti-detect browser, который управляет fingerprints и proxy routing на уровне engine; код оставьте для recon, extraction, pagination и масштаба.
Полная модель четырех слоев разобрана здесь: Автоматизация браузера без блокировок: 4 слоя защиты.
Recon до кода
Если сразу писать скрейпер, его часто приходится переписывать. 10 минут разведки помогают выбрать правильный stack.
Определите anti-bot систему
Откройте DevTools на целевом сайте и проверьте response headers.
| Header | Anti-bot система |
|---|---|
cf-ray, server: cloudflare |
Cloudflare Bot Management |
x-akamai-transformed |
Akamai Bot Manager |
x-datadome |
DataDome |
x-px-* headers |
PerimeterX (now HUMAN) |
| Ничего из списка | Скорее всего, нет коммерческого anti-bot или стоит кастомное решение |
Простой сайт берется через curl_cffi; сайт с Cloudflare требует реальный browser с managed fingerprints.
Проверьте, есть ли API
Перед browser scraper откройте Network и фильтр XHR/Fetch. Многие сайты грузят данные из JSON endpoint.
# If the site loads product data from an API endpoint
from curl_cffi import requests
response = requests.get(
"https://target-site.com/api/v2/products?category=electronics&page=1",Endpoint быстрее, но защищенный сервер может ждать реальную browser session перед API call. Надежнее загрузить страницу и перехватить response.
Оцените rendering model
Отключите JavaScript. Если контент виден, хватит HTTP. Если страница пустая, нужен browser engine.
| Контент виден без JS? | Инструмент |
|---|---|
| Да, все рендерится | curl_cffi or requests with TLS impersonation |
| Частично | curl_cffi for static parts, browser for dynamic |
| Нет, пустая страница | Full browser (Clawbrowser + Playwright/Puppeteer) |
Выбор scraping stack
Инструмент зависит от защиты и rendering. Полный browser тратит ресурсы, когда хватает HTTP; HTTP бесполезен на защищенной SPA.
Дерево решений
Нет anti-bot + server-rendered HTML: используйте curl_cffi с TLS impersonation.
from curl_cffi import requests
response = requests.get(
"https://unprotected-site.com/products",
impersonate="chrome136"Нет anti-bot + JavaScript-rendered: используйте обычный headless browser.
Anti-bot + server-rendered HTML: используйте curl_cffi с residential proxy.
Anti-bot + JavaScript-rendered: используйте Clawbrowser с managed fingerprints и residential proxy.
from playwright.async_api import async_playwright
async def scrape_protected_site():
async with async_playwright() as p:
# Clawbrowser handles fingerprints, TLS and proxy at the engine levelClawbrowser — локальный бесплатный Chromium-based anti-detect browser с managed fingerprints, proxy routing, native CDP и встроенным MCP server.
Паттерны извлечения данных
После anti-bot слоя начинается обычная работа скрейпера: стабильно доставать структурированные данные.
Pagination
Чаще всего встречаются три паттерна pagination.
URL-based pagination
async def scrape_paginated(page, base_url, max_pages=50):
all_items = []
for page_num in range(1, max_pages + 1):
await page.goto(f"{base_url}?page={page_num}")
await human_delay(2000, 4000)Infinite scroll (контент грузится при scroll):
async def scrape_infinite_scroll(page, max_scrolls=30):
all_items = []
previous_count = 0
for _ in range(max_scrolls):"Load more" button:
async def scrape_load_more(page):
while True:
load_more = await page.query_selector('[data-testid="load-more"]')
if not load_more:
breakDynamic content
Часть данных появляется только после click, accordion или hover.
async def extract_product_details(page, product_url):
await page.goto(product_url)
await human_delay(1000, 2000)
# Click "Specifications" tab to reveal hidden dataИзвлечение из shadow DOM
Компоненты в shadow DOM нужно читать через shadow root.
# Pierce through shadow DOM to extract data
data = await page.evaluate("""
() => {
const host = document.querySelector('product-card');
const shadow = host.shadowRoot;Session management для scraping
Скрейпер ходит по сотням страниц. Без аккуратной session он быстро выглядит не как человек.
Session warming
Не идите сразу на target page: home, category, cookies, затем scraping. Поведенческий слой описан в Автоматизация браузера без блокировок: 4 слоя защиты.
async def warm_session(page, site_url):
await page.goto(site_url)
await human_delay(2000, 4000)
# Accept cookies if banner appearsРотация profiles на масштабе
Разносите объем по нескольким Clawbrowser profiles: у каждого свой fingerprint, cookies, storage и proxy.
import asyncio
from playwright.async_api import async_playwright
async def scrape_batch(profile_name, urls):
async with async_playwright() as p:| Масштаб | Подход |
|---|---|
| < 100 pages/day | Single profile, residential proxy, 3-5s delays |
| 100-1,000 pages/day | 3-5 rotating profiles, sticky residential sessions |
| 1,000-10,000 pages/day | 10+ profiles, proxy pool, session warming |
| 10,000+ pages/day | Distributed setup, multiple Clawbrowser instances, backoff logic |
Диагностика блокировок
Симптом обычно показывает, какой слой сломался.
| Симптом | Вероятная причина | Фикс |
|---|---|---|
| Блок на первом request | IP reputation или browser fingerprint | Перейти на residential proxy и anti-detect browser |
| Блок после 5-10 страниц | Behavioral detection или session limits | Замедлиться, добавить delays, прогреть sessions |
| CAPTCHA on every page | Fingerprint leak | Browser is leaking automation signals, switch to managed fingerprints |
| 403 after proxy rotation | Browser fingerprint unchanged | New IP but same broken fingerprint, fix the browser layer |
| Локально работает, в production падает | Datacenter IP | Добавить residential proxy в production |
| Пустая страница / вечный spinner | JavaScript challenge failed | Browser can't pass Cloudflare/Akamai JS check, needs real engine |
| Данные отличаются от ручного визита | Geo or locale mismatch | Proxy location doesn't match fingerprint timezone/language |
Быстрый diagnostic script
import asyncio
from playwright.async_api import async_playwright
async def diagnose_blocking(target_url):
async with async_playwright() as p:Scraping сайтов под Cloudflare
Cloudflare одновременно смотрит TLS, JavaScript, behavior и IP reputation.
Что проверяет Cloudflare
- TLS fingerprint (JA3/JA4): кривой ClientHello получает challenge до HTML.
- JavaScript execution: Turnstile требует настоящий rendering environment.
- IP reputation: IP reputation считается по миллионам сайтов.
- Request patterns: повторяющиеся requests из одной session быстро флагуются.
Workflow
Все слои должны быть чистыми: anti-detect browser для TLS/JS, residential proxy для IP, timing в коде.
async def scrape_cloudflare_site(target_url, profile="cf-scraper"):
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp(
f"http://127.0.0.1:9222?profile={profile}"
)Подробности по Cloudflare: почему ваши Playwright-скрипты блокирует Cloudflare.
Scraping с AI-агентами
MCP server Clawbrowser дает AI-агентам управление реальными browser sessions через CDP, с теми же fingerprints и proxy routing.
Полная интеграция: CDP browser для AI-агентов: гайд для разработчиков.
FAQ
Почему scraper работает локально, но падает в production?
Локально обычно residential IP, production часто datacenter IP. Добавьте residential proxy и проверьте managed fingerprints.
HTTP client или browser?
Для server-rendered HTML без anti-bot хватит HTTP. Для JavaScript rendering или challenges нужен полный browser.
Как понять, что сайт использует Cloudflare?
Ищите cf-ray или server: cloudflare в response headers в DevTools.
Можно ли скрейпить без proxies?
На незащищенных сайтах — да. За Cloudflare/Akamai и на масштабе почти всегда нужны residential proxies.
Начните web scraping без обнаружения
Надежный scraping начинается с recon, правильного инструмента и чистой browser infrastructure.
Install Clawbrowser для browser identity и network layers: скопируйте install prompt с clawbrowser.ai и вставьте его в AI agent. Setup занимает меньше двух минут.
Модель detection: Автоматизация браузера без блокировок: 4 слоя защиты. Детали fingerprinting: Browser fingerprinting: 20+ сигналов, которые используют anti-bot системы.
Continue exploring
Ask AI how Clawbrowser helps
Читайте дальше
Похожие статьи

Автоматизация браузера без блокировок: стек защиты из 4 уровней
Разбираем, почему автоматизация браузера ловит баны, и как закрыть каждый уровень: identity браузера, сеть, поведение и управление сессиями. Практическое руководство для разработчиков.
Читать статью →
Puppeteer-Extra-Stealth устарел: что используют вместо него в 2026
puppeteer-extra-plugin-stealth не обновлялся с 2023 года. Почему он не справляется с современными Anti-Bot системами и что использовать вместо него.
Читать статью →