Gérer JavaScript et les mesures anti-extraction
Utilisez Playwright ou Selenium pour le contenu rendu par JS et la limitation du débit.
Gérer JavaScript et les mesures anti-extraction est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.
Pourquoi JavaScript est important
Les sites web modernes rendent leur contenu avec JavaScript après le chargement de la page. Les extracteurs de HTML statique comme requests+BS4 voient la structure de base, et non le DOM rendu.
# Static scraper sees:
# <div id="app"></div>
# Rendered page has:
# <div id="app">
# <h1>Product List</h1>
# <ul>... dynamically loaded items ...</ul>
# </div>Playwright pour Python
Playwright contrôle un véritable navigateur (Chromium, Firefox, WebKit) par programmation. Il attend l'exécution de JavaScript avant d'extraire le contenu.
# 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())Attendre les éléments
Utilisez page.wait_for_selector() pour attendre qu'un élément apparaisse dans le DOM avant d'extraire les données.
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 est une bibliothèque plus ancienne d'automatisation de navigateur. Playwright est préféré pour les nouveaux projets grâce à une meilleure prise en charge de l'asynchrone et à sa rapidité.
# 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()Mode sans interface graphique
Exécutez les navigateurs en mode sans interface graphique (sans fenêtre visible) pour l'extraction de données côté serveur.
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()Intercepter les requêtes réseau
Playwright peut intercepter et simuler les requêtes réseau, ce qui est utile pour bloquer les publicités et les traceurs ou capturer directement les réponses des interfaces de programmation.
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 fasterLimitation du débit et délais
Imitez le comportement humain : ajoutez des délais aléatoires entre les requêtes et limitez le débit pour éviter de déclencher les systèmes anti-robot.
import time, random
def polite_scrape(urls):
for url in urls:
fetch(url)
time.sleep(random.uniform(1, 3)) # 1-3 s random delayRotation des agents utilisateur
Faites varier les chaînes User-Agent pour éviter un blocage fondé sur l'agent utilisateur UA par défaut de l'extracteur.
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)})Cookies et sessions
Conservez les cookies de session pour rester connecté entre les requêtes. La session de requests et Playwright gèrent tous deux automatiquement les cookies.
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 et considérations juridiques
Les CAPTCHA sont des mesures anti-robot. Les résoudre par programmation est techniquement possible (2captcha, anti-captcha), mais soulève des questions éthiques et juridiques. Consultez toujours le fichier robots.txt et les conditions d'utilisation du site avant d'en extraire des données.
# 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 hitsCaptures d'écran et PDF avec Playwright
Playwright peut prendre des captures d'écran ou imprimer des pages au format PDF — ce qui est utile pour les tests visuels et l'archivage.
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()Vérification rapide
Pourquoi requests et BeautifulSoup échouent-ils sur de nombreux sites web modernes ?
Récapitulatif
Utilisez Playwright ou Selenium pour les pages rendues avec JavaScript. Exécutez-les en mode sans interface graphique sur les serveurs. Ajoutez des délais et faites varier les agents utilisateur pour éviter les blocages. Interceptez les requêtes réseau pour bloquer les traceurs. Respectez toujours robots.txt et les conditions d'utilisation.
Questions Fréquemment Posées
La leçon « Gérer JavaScript et les mesures anti-extraction » est-elle gratuite ?
Oui — le texte complet de « Gérer JavaScript et les mesures anti-extraction » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Gérer JavaScript et les mesures anti-extraction » ?
Utilisez Playwright ou Selenium pour le contenu rendu par JS et la limitation du débit. Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Python Academy ?
Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Gérer JavaScript et les mesures anti-extraction » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?
Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Requêtes HTTP avec requests et httpx
- Analyser du HTML avec BeautifulSoup
- Créer un spider Scrapy
- Gérer JavaScript et les mesures anti-extraction