PdfScrapper
Navigateur visuel qui permet de sélectionner du texte sur des pages web et de l'accumuler dans un PDF, au fil de la navigation.
Fonctionnalités
-
Navigateur intégré (moteur Chromium via QtWebEngine) : barre d'adresse, précédent / suivant / recharger, session persistante (cookies/connexions conservées entre deux lancements).
-
Capture de texte (sélection manuelle) : sélectionnez du texte dans la page puis cliquez sur "➕ Ajouter la sélection au PDF" (ou
Ctrl+Shift+A). L'extrait est stocké avec le titre de la page, son URL et l'heure de capture. -
Capture de bloc au survol : le bloc de contenu sous le curseur (paragraphe, item de liste, section, article...) se surligne automatiquement quand le mode est actif ; un clic dessus l'ajoute directement au PDF, sans avoir à sélectionner le texte à la main. Deux façons de l'activer, combinables :
- Maintenir
Ctrlenfoncé dans la page : actif tant que la touche est tenue, désactivé dès qu'on la relâche (pratique pour capturer un bloc à la volée sans repasser par la souris ensuite). Ctrl+Shift+B(ou le bouton "🎯 Mode capture au survol") : reste actif en continu jusqu'à nouvelle bascule, y compris après avoir suivi un lien vers la page suivante.
Tant que le mode est actif (par l'une ou l'autre méthode), le clic normal (suivre les liens) est suspendu sur la page.
- Maintenir
-
Panneau latéral : liste des extraits capturés (réorganisables, supprimables, renommables), export du PDF final quand vous le souhaitez. Si un extrait est sélectionné dans la liste, chaque nouvelle capture s'insère juste à côté de lui — au-dessus ou en dessous selon la case à cocher "Insérer les nouvelles captures au-dessus de la sélection" (cochée par défaut = au-dessus) — et les captures suivantes continuent de s'enchaîner du même côté du repère sans avoir à re-sélectionner à chaque fois. Sans sélection, les captures s'accumulent simplement à la fin, quel que soit ce réglage.
-
Renommer un extrait : double-cliquez sur un extrait dans la liste (ou sélectionnez-le puis "✏️ Renommer") pour changer son titre affiché — utilisé aussi comme titre de section dans le PDF exporté.
-
Aperçu et style du PDF ("🖌 Aperçu et style du PDF…") : fenêtre dédiée qui affiche un rendu en direct du PDF final (via QtPdf) pendant que vous ajustez les réglages, répartis en deux onglets :
- 🎨 Style : titre du document, format de page (A4/Letter), police globale (Helvetica/Times/Courier — s'applique à tout le document), taille du texte et des titres, couleur des titres, couleur du texte, couleur d'arrière-plan, marges, affichage ou non de l'URL/date sous chaque titre, saut de page entre extraits ou non, et inclusion d'un sommaire (voir ci-dessous).
- ✏️ Corriger le texte : liste des extraits, avec un champ titre et une zone de texte éditable pour corriger le contenu capturé directement (fautes de frappe, nettoyage de texte scrappé, etc.) — les modifications s'appliquent immédiatement à l'extrait (y compris dans le panneau latéral de la fenêtre principale) et l'aperçu se régénère automatiquement.
L'aperçu se régénère automatiquement (avec un léger délai anti-rebond) à chaque changement. Les réglages de style et les corrections de texte faits ici restent actifs pour l'export "normal" depuis le panneau latéral, même après avoir fermé cette fenêtre.
-
Sommaire cliquable : activable depuis l'onglet Style ("Inclure un sommaire", actif par défaut dès qu'il y a plus d'un extrait). Insère une page de sommaire juste après le titre du document, avec un lien cliquable vers chaque section — liens internes PDF standard (annotations
/Linkavec destination directe), utilisables dans n'importe quel lecteur PDF. -
Détection de liens de "suite" : les liens dont le texte ressemble à suivant / next / chapitre suivant / lire la suite / part 2 etc. (ou une balise
<link rel="next">) sont surlignés en orange et listés dans le panneau, pour enchaîner facilement la lecture et la capture sans les chercher manuellement. La détection tourne en continu (MutationObserverJS, résultats poussés vers Python via le pont QWebChannel) plutôt qu'une seule fois au chargement — nécessaire car beaucoup de sites (SPA, pagination injectée après coup en JavaScript) ajoutent ce genre de lien bien après le signal de fin de chargement.
Installation
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt
Lancement
python run.py
Structure du projet
pdfscrapper/
main.py # point d'entrée (QApplication)
main_window.py # fenêtre principale : navigateur + panneau latéral
link_detector.py # heuristiques JS de détection des liens "suivant"
block_picker.py # heuristique JS de surlignage/capture de bloc au survol
bridge.py # pont QWebChannel (JS -> Python) pour la capture de bloc
pdf_style.py # dataclass PdfStyle (réglages de mise en forme du PDF)
pdf_builder.py # génération du PDF (reportlab) : style, fond, sommaire/liens
preview_window.py # fenêtre d'aperçu en direct (QtPdf), style et correction du texte
models.py # dataclass Clip (un extrait capturé)
run.py # lance l'application
Pistes d'évolution
- Sauvegarde/chargement d'une session de capture en cours (JSON).
- Réglage des motifs de détection de liens depuis l'interface.
- Export additionnel en
.txt/.epub.