Journal Selenium >> Anubis et cie

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
5
19
fév.
2026

Vous faites chier avec vos trucs genre Anubis qui cassent mes petits scrapers python :(

Là, je voulais gentiment scraper les missions sur le Fandom de Cyberpunk 2077 pour pouvoir faire mon arbre de mission.

Et pouf, on se fait rembarrer parce qu'on utilise pas un vrai navigateur :

$ curl -v https://cyberpunk.fandom.com/wiki/Cyberpunk_2077_Main_Jobs
> Host: cyberpunk.fandom.com
> User-Agent: curl/8.18.0
> Accept: */*
> 
< HTTP/2 403

Dans ces cas là, pas le choix, Selenium WebDriver.

WebDriver est lib multilangage pour contrôler un navigateur web tel que firefox ou chrome.

Minimal Viable Product®

#!/usr/bin/env python3
from pathlib import Path

from selenium import webdriver
from selenium.webdriver.common.by import By


def main():
    output_dir = Path("html")
    output_dir.mkdir(exist_ok=True)

    driver = webdriver.Firefox()
    driver.get("https://cyberpunk.fandom.com/wiki/Cyberpunk_2077_Main_Jobs")

    links = [
        (link.get_attribute("title"), link.get_attribute("href"))
        for link in driver.find_elements(By.CSS_SELECTOR, ".navbox li a")
    ]
    for link_title, link_href in links:
        page_file = output_dir / f"{link_title}.html"
        if page_file.exists():
            print(f"{link_title} already exists, skipping")
            continue
        print(f"Saving {link_title} from {link_href}")

        driver.get(link_href)
        content_node = driver.find_element(By.CSS_SELECTOR, ".mw-parser-output")
        page_file.write_text(content_node.get_attribute("outerHTML"))

    driver.quit()


if __name__ == "__main__":
    main()

j'trouve ça moins élégant que Hishel. Mais bon.

Modern Problems Require Modern Solutions

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.