lp177
~/lp177 $ ./firefox-console-extractPython · Selenium · Firefoxfirefox-console-extract

firefox-console-extract

Récupérer les messages de la console JavaScript de Firefox avec Selenium

Script Pythonmars 2025PythonSeleniumFirefoxgeckodriver

Code source

Preuve de concept en Python : Selenium pilote Firefox, configuré pour recopier sa console JavaScript sur la sortie de geckodriver. Le script lit ce flux entre deux marqueurs et renvoie les messages d’une page classés par niveau (debug, log, info, warn, error).

But du projet

Obtenir depuis Python, de façon exploitable, les messages qu’une page web écrit dans la console JavaScript de Firefox. Le dépôt tient en un seul fichier, poc_logs_extraction.py.

Fonctionnement

  • La préférence devtools.console.stdout.content fait écrire à Firefox les messages de console sur sa sortie standard.
  • Le service geckodriver est lancé avec log_output=subprocess.PIPE, ce qui rend ce flux lisible depuis le script.
  • Des marqueurs ~~STARTOFCONSOLEREADING~~ et ~~ENDOFCONSOLEREADING~~, émis avec execute_script, délimitent la portion utile et écartent le bruit de démarrage.
  • Chaque ligne console.<niveau>: est découpée en niveau et message, filtrée, et éventuellement affichée en couleur dans le terminal.

Utilisation

Prérequis : Python 3, Firefox, geckodriver et Selenium 4 (pip install selenium). Le script lancé directement émet quelques messages de test puis charge une page de démonstration :

python3 poc_logs_extraction.py

Depuis un autre script :

from poc_logs_extraction import extract_messages_from_url

messages = extract_messages_from_url(
    "https://example.org",
    wait_load=3,
    verbose=False,
    output_filter=["warn", "error"],
)
# {'warn': [...], 'error': [...]}

La fonction ferme le navigateur à la fin de la lecture.

Limites connues

  • Preuve de concept : l’attente du chargement est une pause fixe (wait_load).
  • En mode verbeux, un message console.log provoque une erreur, faute de couleur définie pour ce niveau : utiliser verbose=False ou retirer log du filtre.
  • Le mode sans fenêtre est demandé via l’attribut headless des options, retiré des versions récentes de Selenium : Firefox peut alors s’ouvrir avec une fenêtre visible.