التعامل مع JavaScript وإجراءات مكافحة الكشط
استخدم Playwright/Selenium للمحتوى المُنشأ بواسطة JS وتحديد معدل الطلبات
التعامل مع JavaScript وإجراءات مكافحة الكشط درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
أهمية JavaScript
تعرض المواقع الحديثة المحتوى باستخدام JavaScript بعد تحميل الصفحة. ترى أدوات استخراج HTML الثابتة مثل requests+BS4 الهيكل الأساسي، لا DOM المعروض.
# Static scraper sees:
# <div id="app"></div>
# Rendered page has:
# <div id="app">
# <h1>Product List</h1>
# <ul>... dynamically loaded items ...</ul>
# </div>Playwright لـ Python
يتحكم Playwright برمجيًا في متصفح حقيقي (Chromium وFirefox وWebKit). وينتظر تنفيذ JavaScript قبل استخراج المحتوى.
# pip install playwright
# playwright install
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://example.com")
title = await page.inner_text("h1")
print(title)
await browser.close()
asyncio.run(main())انتظار العناصر
استخدم page.wait_for_selector() للانتظار حتى يظهر عنصر في DOM قبل استخراج البيانات.
from playwright.async_api import async_playwright
import asyncio
async def scrape():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://spa-example.com")
await page.wait_for_selector(".product-list")
items = await page.query_selector_all(".product-item")
texts = [await i.inner_text() for i in items]Selenium
Selenium مكتبة أقدم لأتمتة المتصفحات. ويُفضَّل Playwright للمشاريع الجديدة بسبب دعمه الأفضل للبرمجة غير المتزامنة وسرعته.
# pip install selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://example.com")
elem = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "h1"))
)
print(elem.text)
driver.quit()الوضع غير المرئي
شغّل المتصفحات في الوضع غير المرئي (من دون نافذة ظاهرة) لاستخراج البيانات من جانب الخادم.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True) # no window
page = await browser.new_page()
await page.goto("https://example.com")
html = await page.content()
await browser.close()اعتراض طلبات الشبكة
يمكن لـ Playwright اعتراض طلبات الشبكة ومحاكاتها، وهو أمر مفيد لحظر الإعلانات وأدوات التتبع أو لالتقاط استجابات API مباشرة.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.route("**/*.{png,jpg,css}", lambda route: route.abort())
await page.goto("https://example.com") # loads 3x fasterتحديد معدل الطلبات والفواصل الزمنية
حاكِ سلوك البشر: أضف فواصل زمنية عشوائية بين الطلبات وحدّد معدلها لتجنب تشغيل أنظمة مكافحة الروبوتات.
import time, random
def polite_scrape(urls):
for url in urls:
fetch(url)
time.sleep(random.uniform(1, 3)) # 1-3 s random delayتدوير User-Agent
دوّر سلاسل User-Agent لتجنب الحظر استنادًا إلى User-Agent الافتراضي لأداة الاستخراج.
import requests, random
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...",
]
def fetch(url):
return requests.get(url, headers={"User-Agent": random.choice(USER_AGENTS)})ملفات تعريف الارتباط والجلسات
حافظ على ملفات تعريف ارتباط الجلسة للبقاء مسجّلًا للدخول عبر الطلبات. يتعامل كل من requests Session وPlaywright مع ملفات تعريف الارتباط تلقائيًا.
import requests
with requests.Session() as s:
s.post("https://example.com/login", data={"user":"me","pass":"pw"})
# session cookie kept automatically:
dashboard = s.get("https://example.com/dashboard")CAPTCHA والاعتبارات القانونية
تُعد CAPTCHA إجراءات لمكافحة الروبوتات. ويُعد حلها برمجيًا ممكنًا من الناحية التقنية (2captcha وanti-captcha)، لكنه يثير مخاوف أخلاقية وقانونية. راجع دائمًا ملف robots.txt وشروط الخدمة للموقع قبل استخراج البيانات.
# Before scraping:
# 1. Check robots.txt: https://example.com/robots.txt
# 2. Review the Terms of Service for "scraping" or "automated access" clauses
# 3. Only scrape public data
# 4. Honour Crawl-delay directives
# 5. Cache responses to avoid repeated hitsلقطات الشاشة وPDF باستخدام Playwright
يمكن لـ Playwright التقاط لقطات للشاشات أو طباعة الصفحات إلى PDF، وهو أمر مفيد للاختبار المرئي والأرشفة.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://example.com")
await page.screenshot(path="page.png", full_page=True)
await page.pdf(path="page.pdf")
await browser.close()تحقق سريع
لماذا يفشل requests + BeautifulSoup في التعامل مع العديد من المواقع الحديثة؟
مراجعة
استخدم Playwright أو Selenium للصفحات المعروضة باستخدام JavaScript. شغّلهما في الوضع غير المرئي على الخوادم. أضف فواصل زمنية ودوّر User-Agents لتجنب الحظر. اعترض طلبات الشبكة لحظر أدوات التتبع. احترم دائمًا ملف robots.txt وشروط الخدمة.
الأسئلة الشائعة
هل درس «التعامل مع JavaScript وإجراءات مكافحة الكشط» مجاني؟
نعم — نص درس «التعامل مع JavaScript وإجراءات مكافحة الكشط» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «التعامل مع JavaScript وإجراءات مكافحة الكشط»؟
استخدم Playwright/Selenium للمحتوى المُنشأ بواسطة JS وتحديد معدل الطلبات تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «التعامل مع JavaScript وإجراءات مكافحة الكشط»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- طلبات HTTP باستخدام requests وhttpx
- تحليل HTML باستخدام BeautifulSoup
- بناء عنكبوت Scrapy
- التعامل مع JavaScript وإجراءات مكافحة الكشط