يعمل scraper في التشغيل الأول. في التشغيل الثالث تظهر 403 أو response فارغ أو CAPTCHA loop. الكود لم يتغير. الموقع لم يتغير. الذي تغير أن نظام anti-bot بنى profile للـ session وبدأ الحظر.
TL;DR: معظم الحظر يأتي من أربع طبقات: network وbrowser identity وbehavior وsession state. ابدأ بـ anti-detect browser يدير fingerprints وproxy routing على مستوى engine، واترك الكود للاستطلاع والاستخراج وpagination والتوسع.
النموذج الكامل للطبقات الأربع في أتمتة browser بدون حظر: طبقات الدفاع الأربع.
استطلاع قبل كتابة الكود
كتابة scraper مباشرة تعني غالبا إعادة بنائه. عشر دقائق استطلاع تكفي لاختيار 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
قبل بناء scraper يعتمد على browser، افتح 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 أسرع، لكن المواقع المحمية قد تتوقع API call من browser session حقيقية. الأفضل تحميل الصفحة في browser واعتراض response.
تقييم نموذج rendering
عطل 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 + 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 + 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 هو anti-detect browser محلي ومجاني ومبني على Chromium، مع managed fingerprints وproxy routing وnative CDP وMCP server مدمج.
أنماط استخراج البيانات
بعد تجاوز طبقة anti-bot يبدأ العمل الحقيقي: استخراج بيانات منظمة بثبات.
Pagination
غالبا تظهر pagination بثلاثة أشكال.
pagination عبر URL
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:
breakالتعامل مع المحتوى الديناميكي
بعض البيانات تظهر فقط بعد 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;إدارة sessions للـ scraping
scraper يزور صفحات أكثر بكثير من المستخدم الحقيقي. لذلك يجب أن تبدو session متسقة.
Session warming
لا تبدأ بالصفحة الهدف: افتح home ثم category ثم cookie banner وبعدها scrape. طبقة behavior مشروحة في أتمتة browser بدون حظر: طبقات الدفاع الأربع.
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، ولكل profile 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 صفحات ثم يحظر | behavior 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 |
سكريبت تشخيص سريع
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 حقيقية.
- IP reputation: IP reputation تقيم عبر ملايين المواقع.
- Request patterns: request patterns المتكررة من نفس 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 في لماذا تحظر Cloudflare سكربتات Playwright.
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؟
HTTP يكفي مع HTML من السيرفر وبدون anti-bot. مع JavaScript rendering أو challenges استخدم browser كامل.
كيف أعرف أن الموقع يستخدم Cloudflare؟
ابحث عن cf-ray أو server: cloudflare في response headers داخل DevTools.
هل يمكن scraping بدون proxies؟
نعم في المواقع غير المحمية. خلف Cloudflare أو Akamai وعلى نطاق كبير ستحتاج غالبا residential proxies.
ابدأ Web Scraping بدون اكتشاف
scraping الموثوق يبدأ باستطلاع الموقع، اختيار الأداة المناسبة، وبنية browser نظيفة.
Install Clawbrowser لإدارة browser identity وnetwork layers: انسخ prompt التثبيت من clawbrowser.ai والصقه في وكيل AI. يستغرق setup أقل من دقيقتين.
نموذج detection في أتمتة browser بدون حظر: طبقات الدفاع الأربع. تفاصيل fingerprinting في Browser Fingerprinting: أكثر من 20 إشارة تستخدمها أنظمة anti-bot.
Continue exploring
Ask AI how Clawbrowser helps
تابع القراءة
مقالات ذات صلة

شرح Browser Fingerprinting: أكثر من 20 إشارة تستخدمها أنظمة Anti-Bot لاكتشاف Automation
مرجع شامل يشرح Browser Fingerprinting وأهم الإشارات ولماذا يتفوق الاتساق على الانتحال، لبناة AI agent ومهندسي Automation.
قراءة المقال →
متصفح CDP لوكلاء الذكاء الاصطناعي: دليل للمطورين
يُعد Chrome DevTools Protocol المعيار لتحكم وكلاء الذكاء الاصطناعي في المتصفحات. تعرّف إلى ربط وكيلك بمتصفح CDP لا يُحظر.
قراءة المقال →