


Chrome sans tête et marionnettiste pour le grattage et les tests Web
Le marionnettiste et le chrome sans tête sont des outils puissants pour gérer les sites Web à forte intensité de JavaScript. La réponse est qu'ils réalisent que le contenu dynamique rampe et les tests automatisés en simulant un véritable environnement de navigateur. 1. Headless Chrome s'exécute en mode Interfaceless, peut exécuter des ressources JavaScript et de chargement; 2. Puppeneer, en tant que bibliothèque Node.js, fournit un chrome de contrôle de l'API et peut automatiser l'interaction de la page; 3. Comparé aux robots statiques, il peut obtenir un contenu rendu dynamique, gérer le chargement asynchrone et simuler les opérations utilisateur; 4. Applicable au spa, tests de processus de connexion, captures d'écran et analyse des performances; 5. Les mécanismes de contre-rédaction doivent être évités lors de l'utilisation, tels que la définition des en-têtes de demande raisonnable et l'intervention des ressources non essentielles; 6. Il existe des limites telles qu'une consommation élevée des ressources et une détection facile. Le dramaturge ou le sélénium peut être utilisé à la place, donc cette combinaison est toujours une solution fiable lorsqu'un contexte de navigateur réel est requis.
Chrome sans tête et marionnettiste sont des outils puissants pour le grattage Web et les tests automatisés, en particulier lorsqu'ils traitent avec des sites Web modernes en JavaScript. Contrairement aux outils de grattage traditionnels qui analysent uniquement le HTML statique, les marionnettistes peuvent rendre les pages Web complètes comme un véritable utilisateur le verrait dans le navigateur - ce qui le rend idéal pour le contenu dynamique.
Voici comment ils fonctionnent ensemble et pourquoi ils sont utiles.
Qu'est-ce que le chrome sans tête et le marionnettiste?
Chrome sans tête est un mode du navigateur Chrome qui s'exécute sans interface utilisateur graphique (GUI). Il remplit toutes les mêmes fonctions que Chrome ordinaire - chargement des pages, exécutant JavaScript, manipulant CSS - mais le fait en arrière-plan.
Puppeteer est une bibliothèque Node.js développée par l'équipe Chrome qui fournit une API de haut niveau pour contrôler le chrome sans tête (ou complet) via le protocole Devtools. Bien que conçu à l'origine pour les tests, il est largement utilisé pour le grattage, la génération de PDF, la capture de capture d'écran et la surveillance des performances.
Vous pouvez considérer la marionnettiste comme une télécommande pour Chrome - des actions automatisées comme cliquer sur les boutons, remplir les formulaires et naviguer les pages.
Pourquoi utiliser des marionnettiste pour le grattage Web?
De nombreux sites Web chargent aujourd'hui du contenu à l'aide de frameworks JavaScript comme React, Angular ou Vue. Des outils comme requests
et BeautifulSoup
dans Python ne peuvent pas exécuter JavaScript, ils manquent donc la plupart du contenu réel.
Marionnettiste résout ceci par:
- Rendre le contenu généré par JavaScript
- En attendant que les éléments se chargent (par exemple, des images chargées de paresseux ou un parchemin infini)
- Gestion des cookies d'authentification et de session
- Interagir avec la page (clics, saisie d'entrée, etc.)
Par exemple, le grattage d'un site comme Airbnb ou une application à une seule page (SPA) devient réalisable car le marionnettiste attend que le Dom mette à jour après les appels d'API.
const puppeteer = require ('puppeteer'); (async () => { const Browser = Await Puppeteer.Launch (); const page = attendre le navigateur.newPage (); Await Page.goto ('https://example-quotes-site.com', {Waittuntil: 'NetworkIdle2'}); const Citations = attendre page.evaluate (() => { return array.from (document.QuerySelectorall ('. Quote')). map (q => ({ Texte: Q.QuerySelector ('. Texte'). InnerText, Auteur: Q.QuerySelector ('. Auteur'). InnerText })); }); console.log (citations); attendre le navigateur.close (); }) ();
Ce script charge une page, attend jusqu'à ce qu'il soit principalement inactif (c'est-à-dire des ressources asynchrones chargées), puis extrait les données du DOM rendu.
Caractéristiques clés pour les tests
Le marionnettiste est également excellent pour les tests de bout en bout (E2E):
- Test de soumission de formulaire : automatiser les flux de connexion ou les processus de paiement.
- Régression visuelle : prenez des captures d'écran avant et après les modifications pour détecter les décalages d'interface utilisateur.
- Audit des performances : intégrer avec Chrome Devtools pour mesurer les temps de chargement, LCP, FID, etc.
- Rapports de couverture : Voir quel JavaScript a été exécuté lors d'un test.
Exemple: tester un formulaire de connexion
Await Page.Type ('# Username', 'TesUser'); attendre page.type («# mot de passe», «mot de passe123»); attendre page.click («# login-btn»); attendre page.WaitFornavigation (); attendre (attendre page.url ()) .tobe ('https://example.com/dashboard');
Cela imite le comportement réel de l'utilisateur et garantit que le flux complet fonctionne.
Meilleures pratiques et conseils
Pour utiliser le marionnettiste efficacement et éviter la détection (en particulier pour le grattage), gardez ces conseils à l'esprit:
Évitez la détection comme un bot :
- Utiliser
--disable-blink-features=AutomationControlled
Flag - Définir des agents utilisateur réalistes et des tailles de fenêtre
- Ajouter de petits retards entre les actions
- Utiliser
Améliorer les performances :
- Exécutez en mode sans tête (
headless: true
) - Bloquer les ressources inutiles (images, CSS, publicités) si ce n'est pas nécessaire
attendre page.setRequestInterception (true); page.on ('requête', req => { if (['Image', 'Stylesheet', 'Font']. Inclut (req.resourceType ())) { req.abort (); } autre { req.Continue (); } });
-
Gérer le contenu dynamique :
- Utilisez
page.waitForSelector()
oupage.waitForTimeout()
pour attendre les éléments - Préférez
waitForFunction()
pour des conditions complexes
- Utilisez
-
Courir à grande échelle :
- Utilisez
puppeteer-core
avec des instances chromées externes (par exemple, docker, navigateur sans - Gérer attentivement les instances du navigateur pour éviter les fuites de mémoire
- Utilisez
- Utilisation plus élevée des ressources que les clients HTTP simples
- Les appels API plus lents que directs
- Peut être détecté par des systèmes anti-bot (par exemple, cloudflare)
- Node primaire.js uniquement (bien que Python ait
pyppeteer
, c'est moins stable) - Playwright (par Microsoft): prend en charge plusieurs navigateurs (Chromium, Firefox, WebKit), des API plus robustes, une meilleure émulation mobile.
- Selenium avec WebDriver : plus mature, prend en charge plus de langues, mais plus lente et plus complexe à configurer.
Limitations et alternatives
Bien que puissant, le marionnettiste a quelques inconvénients:
Les alternatives comprennent:
Fondamentalement, si vous avez besoin de gratter ou de tester un site qui s'appuie fortement sur JavaScript, Puppeteer Headless Chrome est un choix solide et bien documenté. Ce n'est pas magique - vous devez toujours gérer les erreurs, les retards et les changements de site - mais cela vous donne un véritable environnement de navigateur avec lequel travailler.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
- Exécutez en mode sans tête (

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'image non affichée est généralement causée par un mauvais chemin de fichier, un nom ou une extension de fichier incorrect, des problèmes de syntaxe HTML ou un cache de navigateur. 1. Assurez-vous que le chemin SRC est cohérent avec l'emplacement réel du fichier et utilisez le chemin relatif correct; 2. Vérifiez si le cas de fichier et l'extension correspondent exactement et vérifiez si l'image peut être chargée en entrant directement l'URL; 3. Vérifiez si la syntaxe TAG IMG est correcte, assurez-vous qu'il n'y a pas de caractères redondants et que la valeur d'attribut ALT est appropriée; 4. Essayez de forcer l'actualisation de la page, de nettoyer le cache ou d'utiliser le mode incognito pour éliminer les interférences du cache. Le dépannage dans cet ordre peut résoudre la plupart des problèmes d'affichage d'image HTML.

Utilisez des CM sans tête en conjonction avec la génération de sites statiques d'Astro (SSG) pour créer des sites Web hautes performances et axés sur le contenu. 2.Astro obtient du contenu de la CMS sans tête (comme la santé mentale, le contenu, la strapi, le wordpress ou les datocms) via des API et des pré-rendements en tant que pages statiques. 3. Utilisez getStaticPaths () pour générer le chemin de la page, obtenir des données via les appels CMSAPI et séparer le contenu de la frontale. 4. Les avantages comprennent d'excellentes performances (chargement rapide, SEO-friendly), une expérience d'édition amicale, une flexibilité architecturale, une haute sécurité et une évolutivité. 5. Les mises à jour du contenu nécessitent une reconstruction du site, et vous pouvez utiliser CMSWebHook pour toucher

La clé de l'utilisation de boutons radio dans HTML5 est de comprendre comment ils fonctionnent et d'organiser correctement la structure du code. 1. L'attribut de nom de chaque bouton radio doit être le même pour obtenir une sélection mutuellement exclusive; 2. Utilisez des balises d'étiquette pour améliorer l'accessibilité et cliquer sur l'expérience; 3. Il est recommandé d'envelopper chaque option dans une div ou un étiquette pour améliorer la clarté structurelle et le contrôle du style; 4. Définissez les sélections par défaut via l'attribut vérifié; 5. La valeur de la valeur doit être concise et significative, ce qui est pratique pour le traitement de soumission de formulaire; 6. Le style peut être personnalisé via CSS, mais la fonction doit être assurée d'être normale. La maîtrise de ces points clés peut éviter efficacement des problèmes courants et améliorer l'efficacité de l'utilisation.

La page H5 réalise les fonctions de numérisation de code-bar et de code QR, principalement en appelant GetUserMedia pour obtenir des autorisations de caméra et la combiner avec la bibliothèque de décodage pour une identification en temps réel. 1. Utilisez d'abord GetUserMedia pour obtenir des autorisations de caméra et lier le flux vidéo à la balise. Faites attention aux différences dans l'environnement HTTPS et la prise en charge des appareils; 2. En interceptant les trames vidéo et en extraction des données d'image, contrôlez la fréquence de reconnaissance pour optimiser les performances; 3. Utilisez des bibliothèques de décodage telles que le zxing ou les quaggajs pour la reconnaissance d'image, il est recommandé d'empêcher les résultats de reconnaissance; 4. En termes de compatibilité, les contraintes vidéo peuvent être définies pour optimiser l'adaptation des périphériques et améliorer l'expérience utilisateur via des invites d'interface utilisateur; 5. En termes d'optimisation des performances, il est recommandé d'utiliser un travailleur Web pour effectuer des tâches de décodage pour éviter de bloquer le principal

Pour utiliser WebMidiapi pour créer une interface de contrôle avancée, vous devez d'abord obtenir des autorisations de périphérique, demander l'autorisation via Navigator.RequestMidiaCcess () et les périphériques d'entrée et de sortie de processus; Deuxièmement, écoutez ou envoyez des messages MIDI, tels que l'écoute des opérations de bouton via l'entrée.addeventListener, et envoyez des instructions de contrôle LED via la sortie.Send; Vous devez également vous adapter à différents contrôleurs, établir des fichiers de configuration ou fournir des fonctions de mappage définies par l'utilisateur; Enfin, faites attention aux compétences en développement telles que la réponse en temps réel, la gestion des erreurs, les outils de débogage et la correspondance des numéros de canal.

Oui, il fait partie de HTML5, mais son utilisation a progressivement diminué et est controversée. Utilisé pour combiner le titre principal avec le sous-titre afin que seul le plus haut niveau de titres soit identifié dans le plan du document; Par exemple, le titre principal et le sous-titre peuvent être enveloppés pour indiquer qu'ils ne sont que des titres auxiliaires plutôt que des titres de chapitre indépendants; Cependant, les raisons pour lesquelles ils ne sont plus largement utilisées incluent: 1. Les lecteurs du navigateur et de l'écran leur sont un support incohérent, 2. Il existe des alternatives plus simples telles que l'utilisation de CSS pour contrôler les styles, 3. L'algorithme de contour du document HTML n'est pas largement pris en charge; Malgré cela, il peut toujours être pris en compte dans des sites Web ou des documents avec des exigences sémantiques élevées; Alors que dans la plupart des cas, les développeurs ont tendance à utiliser un seul, à gérer les styles via CSS et à maintenir des niveaux de titre clairs.

SémantichtmlimprovesbothseoandaccessibilityByusing a été ultime

L'API NetworkInformation de H5 peut optimiser les stratégies de chargement en jugeant le type de réseau. ① Utilisez Navigator.Connection pour obtenir le type de réseau et l'état en ligne; ② décider de charger des ressources à haute définition ou un contenu léger en fonction des valeurs efficaces (telles que lent-2g, 4g, 5g); ③ Ajustez dynamiquement la stratégie de chargement en écoutant des événements de changement; ④ Faites attention à des problèmes tels que la compatibilité, les restrictions limitées de support iOS et de mode de confidentialité.
