دليل DrissionPage العملي: دمج البروكسي السكني مع HTTP و Chromium في Python

تعرف على كيفية استخدام DrissionPage مع بروكسي ProxyHat السكني لتبديل سلس بين وضع HTTP ووضع المتصفح، مع أمثلة كود Python جاهزة للتشغيل وأنماط إنتاجية حقيقية.

DrissionPage Proxy Guide: HTTP + Chromium Scraping with Residential IPs

ما هو DrissionPage ولماذا يهم مستخدمي البروكسي؟

DrissionPage هو إطار عمل Python مفتوح المصدر يجمع بين بساطة requests وقوة التحكم في Chromium عبر بروتوكول CDP (Chrome DevTools Protocol). بالنسبة لمطوري الكشط (scraping) الذين يستخدمون بروكسي سكني مثل drissionpage proxy، يوفر هذا الإطار ميزة فريدة: يمكنك البدء في وضع HTTP الخفيف، ثم التبديل إلى وضع المتصفح الكامل عند الحاجة لتشغيل JavaScript — دون فقدان ملفات تعريف الارتباط (cookies) أو حالة الجلسة.

هذا يعني توفيرًا كبيرًا في التكلفة. تشغيل متصفح Chromium كامل يستهلك حوالي 200–400 ميجابايت من الذاكرة لكل مثيل، بينما وضع HTTP يستهلك أقل من 20 ميجابايت. في عمليات الكشط واسعة النطاق التي تتضمن آلاف الطلبات، يقلل DrissionPage تكاليف البنية التحتية بنسبة قد تصل إلى 90% مقابل تشغيل Selenium أو Playwright لكل طلب.

تنبيه قانوني وأخلاقي: هذا الدليل مخصص للوصول إلى البيانات العامة المشروعة فقط. تأكد من الالتزام بـ GDPR في الاتحاد الأوروبي و CFAA في الولايات المتحدة. احترم ملف robots.txt وشروط الخدمة، وفضل واجهات API الرسمية عند توفرها.

نموذج DrissionPage: SessionPage و ChromiumPage و WebPage

يتكون DrissionPage من ثلاثة أنواع رئيسية للصفحات، وكلها تشارك نفس الواجهة البرمجية في معظم العمليات:

النوعالوصفاستهلاك المواردالاستخدام الأمثل
SessionPageوضع HTTP يعتمد على urllib3 — يشبه requestsمنخفض جدًا (~20MB)صفحات HTML ثابتة، واجهات API، JSON
ChromiumPageتحكم كامل في Chromium عبر CDPمرتفع (~200–400MB)صفحات JavaScript الديناميكية، تفاعل مع DOM
WebPageيجمع النوعين مع تبديل سلس وحالة مشتركةمتغير حسب الوضع النشطالحالات المختلطة التي تتطلب كلا الوضعين

الفكرة الجوهرية: لماذا تشغل متصفحًا كاملًا لجلب صفحة ثابتة؟ مع drissionpage web scraping، تبدأ في وضع HTTP السريع، وإذا واجهت صفحة تتطلب تشغيل JavaScript، تنتقل إلى وضع المتصفح مع الاحتفاظ بنفس ملفات تعريف الارتباط ورؤوس الجلسة. هذا النهج يقلل التكلفة ويزيد الإنتاجية بشكل كبير.

الواجهة البرمجية الأصلية: ele() و eles() و ChromiumOptions و listen

تحديد العناصر بـ ele() و eles()

يستخدم DrissionPage صيغة موحدة لتحديد العناصر تشبه CSS selectors لكنها أكثر مرونة:

from DrissionPage import WebPage

page = WebPage()
page.get('https://example.com')

# تحديد بالسمة
title = page.ele('@class=product-title')

# تحديد بالوسم
inputs = page.eles('tag:input')

# تحديد بـ XPath
price = page.ele('xpath://span[@class="price"]')

# تحديد مركب
button = page.ele('tag:button@@text()=شراء')

الصيغة @class=... تبحث عن عنصر بسمة class محددة، وtag:input تبحث بالوسم، وxpath://... تستخدم XPath القياسي. كما يدعم @@ للجمع بين شروط متعددة.

إعداد ChromiumOptions

لإعداد المتصفح، تستخدم ChromiumOptions لتكوين جميع جوانب جلسة Chromium:

from DrissionPage import ChromiumOptions

co = ChromiumOptions()
co.headless(True)
co.set_argument('--no-sandbox')
co.set_argument('--disable-gpu')
co.set_user_agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64)...')
co.set_proxy('http://gate.proxyhat.com:8080')

التقاط طلبات XHR/JSON الخلفية بـ listen

من أقوى ميزات drissionpage chromium هي القدرة على التقاط طلبات الشبكة الخلفية (XHR/Fetch) التي تقوم بها الصفحة تلقائيًا. هذا يكشف عن واجهات API مخفية:

from DrissionPage import ChromiumPage

page = ChromiumPage()
page.listen.start('api/products')  # مراقبة الطلبات التي تطابق النمط
page.get('https://example.com/shop')

for packet in page.listen.steps(count=5):
    print(packet.url)
    print(packet.response.body)  # جسم الاستجابة JSON

إعداد البروكسي في DrissionPage

تكوين drissionpage proxy يختلف حسب الوضع. لـ SessionPage، تستخدم set_proxies() مباشرة. لـ ChromiumPage، تمرر البروكسي عبر ChromiumOptions.set_proxy().

البروكسي في SessionPage (وضع HTTP)

from DrissionPage import SessionPage

page = SessionPage()
page.set.proxies({
    'http': 'http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080',
    'https': 'http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080',
})
page.get('https://httpbin.org/ip')
print(page.json)

البروكسي في ChromiumPage (وضع المتصفح)

from DrissionPage import ChromiumPage, ChromiumOptions

co = ChromiumOptions()
co.set_proxy('http://user-country-DE-session-xyz789:pass@gate.proxyhat.com:8080')
co.headless(True)

page = ChromiumPage(co)
page.get('https://httpbin.org/ip')
print(page.ele('tag:body').text)

لماذا البروكسي السكني تحديدًا؟ الأهداف الصعبة مثل منصات التجارة الإلكترونية الكبرى وشبكات التواصل الاجتماعي تستخدم أنظمة مكافحة البوتات التي تكشف عناوين IP الخاصة بمراكز البيانات بسرعة. البروكسي السكني يوفر عناوين IP من مزودي خدمة إنترنت حقيقيين، مما يجعل الطلبات تبدو كأنها من مستخدمين عاديين. حسب دراسات الصناعة، يمكن أن تصل نسبة حظر بروكسي مراكز البيانات إلى 40–60% على المنصات المحمية، بينما يبقى معدل نجاح البروكسي السكني فوق 95%.

مثال عملي: WebPage يبدأ بـ HTTP ثم ينتقل إلى Chromium

هذا مثال كامل قابل للتشغيل يوضح القوة الحقيقية لـ DrissionPage: نبدأ في وضع HTTP عبر بروكسي سكني أمريكي بجلسة ثابتة، نجمع البيانات الأولية، ثم ننتقل إلى وضع المتصفح لصفحة تتطلب JavaScript:

from DrissionPage import WebPage
import json

# بناء اسم المستخدم مع استهداف جغرافي وجلسة ثابتة
country = 'US'
session_id = 'abc123'
username = f'user-country-{country}-session-{session_id}'
password = 'pass'
proxy_url = f'http://{username}:{password}@gate.proxyhat.com:8080'

# إنشاء WebPage في وضع HTTP
page = WebPage(mode='s')  # 's' = SessionPage
page.set.proxies({
    'http': proxy_url,
    'https': proxy_url,
})

# الخطوة 1: جلب صفحة ثابتة بوضع HTTP
page.get('https://httpbin.org/ip')
print('وضع HTTP — عنوان IP:', page.json['origin'])

# حفظ ملفات تعريف الارتباط
cookies = page.cookies(as_dict=True)

# الخطوة 2: التبديل إلى وضع المتصفح للصفحة الديناميكية
page.change_mode()  # ينتقل إلى ChromiumPage تلقائيًا

# البروكسي مُطبق على المتصفح أيضًا
page.get('https://quotes.toscrape.com/js/')

# التقاط عناصر بعد تشغيل JavaScript
quotes = page.eles('@class=quote')
for q in quotes[:5]:
    text = q.ele('@class=text').text
    author = q.ele('@class=author').text
    print(f'{author}: {text[:50]}...')

page.close()

لاحظ كيف أن change_mode() يحتفظ تلقائيًا بملفات تعريف الارتباط والحالة بين الوضعين. هذا يلغي الحاجة لإعادة المصادقة أو إعادة إعداد الجلسة.

أنماط الإنتاج: تثبيت الجلسة، إعادة المحاولة، التقاط الحزم، التزامن

تثبيت البروكسي لكل جلسة (Sticky Sessions)

عند الكشط المتسلسل لموقع واحد، تحتاج إلى الحفاظ على نفس عنوان IP طوال الجلسة لتجنب اكتشاف النظام. استخدم علم session- في اسم المستخدم:

import uuid

def build_proxy(country='US', session=None):
    session = session or str(uuid.uuid4())[:8]
    username = f'user-country-{country}-session-{session}'
    return f'http://{username}:pass@gate.proxyhat.com:8080'

# كل جلسة تحصل على IP ثابت
session_a = build_proxy(session='sess-a001')
session_b = build_proxy(session='sess-b002')

إعادة المحاولة مع تبديل البروكسي

import time

def fetch_with_retry(page, url, max_retries=3):
    for attempt in range(max_retries):
        try:
            resp = page.get(url, timeout=15)
            if resp.status == 200:
                return resp
        except Exception as e:
            print(f'محاولة {attempt+1} فشلت: {e}')
            # تبديل الجلسة للحصول على IP جديد
            new_proxy = build_proxy(session=f'retry-{attempt}')
            page.set.proxies({'http': new_proxy, 'https': new_proxy})
            time.sleep(2)
    return None

اكتشاف واجهات API المخفية عبر listen

كثير من المواقع الحديثة تحمل بياناتها عبر طلبات XHR خلفية. بدلًا من تحليل HTML المعقد، يمكنك التقاط استدعاءات API مباشرة:

from DrissionPage import ChromiumPage, ChromiumOptions

co = ChromiumOptions()
co.set_proxy('http://user-country-GB-session-api001:pass@gate.proxyhat.com:8080')
co.headless(True)

page = ChromiumPage(co)
page.listen.start('/api/')  # مراقبة جميع طلبات API

page.get('https://example.com/dashboard')

api_endpoints = []
for packet in page.listen.steps(count=20, timeout=10):
    if packet.response.status == 200:
        api_endpoints.append({
            'url': packet.url,
            'method': packet.method,
            'body': packet.response.body[:500],
        })

print(f'اكتشف {len(api_endpoints)} نقطة API')
for ep in api_endpoints:
    print(json.dumps(ep, indent=2))

حدود التزامن

عند تشغيل عدة مثيلات Chromium معًا، راقب الموارد. كل مثيل Chromium يستهلك حوالي 300 ميجابايت من الذاكرة. على خادم بـ 8 جيجابايت، لا تتجاوز 20–25 جلسة متصفح متزامنة. للوضع HTTP فقط، يمكنك تشغيل مئات الجلسات المتزامنة بسهولة.

الوضعالذاكرة لكل مثيلالحد العملي للتزامن (8GB RAM)سرعة الطلب
SessionPage (HTTP)~20MB200–500100–500 req/s
ChromiumPage~300MB20–255–15 req/s
WebPage (مختلط)متغيرحسب الوضع النشطمتغير

متى لا تنتقل إلى المتصفح؟

الانتقال إلى وضع Chromium ليس دائمًا الحل الأفضل. إليك الحالات التي يكفي فيها وضع HTTP:

  • الصفحات الثابتة: إذا كان HTML يحتوي على البيانات مباشرة، لا حاجة لتشغيل JavaScript.
  • واجهات API المكتشفة: إذا وجدت نقطة API عبر listen سابقًا، استدعها مباشرة بـ SessionPage.
  • ملفات JSON/XML: استجابات API الخام لا تتطلب متصفحًا.
  • الكشط واسع النطاق: آلاف الطلبات في الدقيقة — المتصفح سيكون عنق الزجاجة.

القاعدة العملية: ابدأ دائمًا بـ SessionPage. إذا أعطاك كود HTML فارغًا أو نصًا يشير إلى تفعيل JavaScript، انتقل إلى ChromiumPage. يمكنك معاينة مواقع البروكسي المتاحة لاختيار الموقع الأمثل لهدفك.

الاعتبارات الأخلاقية والقانونية

قبل البدء في أي عملية كشط، ضع في اعتبارك ما يلي:

  • احترم robots.txt: تحقق من https://target.com/robots.txt قبل الكشط.
  • معدل الطلبات: حافظ على معدل معقول (مثل 1–2 طلب/ثانية لكل IP) لتجنب إرهاق الخوادم.
  • البيانات الشخصية: تجنب جمع البيانات الشخصية دون أساس قانوني، وتأكد من التوافق مع GDPR.
  • شروط الخدمة: اقرأ شروط استخدام الموقع — بعض الموارد تمنع الكشط الآلي صراحة.
  • فضل API الرسمي: إذا وفر الموقع واجهة API، استخدمها بدلًا من الكشط.

لمزيد من التفاصيل حول إعداد البروكسي، راجع وثائق ProxyHat الرسمية.

نقاط رئيسية

  • DrissionPage يجمع HTTP والمتصفح في أداة واحدة مع حالة مشتركة — يوفر حتى 90% من تكاليف التشغيل.
  • استخدم SessionPage للصفحات الثابتة وChromiumPage للصفحات الديناميكية، وWebPage للحالات المختلطة.
  • البروكسي السكني عبر gate.proxyhat.com:8080 ضروري للأهداف المحمية بأنظمة مكافحة البوتات.
  • listen.start() يكشف عن واجهات API المخفية — استخدمه لاكتشاف نقاط النهاية ثم استدعائها مباشرة بـ HTTP.
  • ثبّت الجلسة بـ session- لتجنب تبديل IP غير المرغوب، وطبق إعادة المحاولة مع تبديل البروكسي.
  • التزم بـ robots.txt و GDPR و CFAA — الكشط الأخلاقي مستدام على المدى الطويل.

جرّب ProxyHat اليوم — ابدأ بـ خطط الأسعار المناسبة، أو استكشف حالة استخدام كشط الويب و تتبع نتائج البحث للمزيد من السيناريوهات العملية.

¿Listo para empezar?

Accede a más de 50M de IPs residenciales en más de 148 países con filtrado impulsado por IA.

Ver preciosProxies residenciales
← Volver al Blog