Outils pour copier de façon sélective HTML+CSS+JS à partir de sites existants [fermé]

comme la plupart des développeurs web, j'aime à l'occasion regarder la source des sites Web pour voir comment leur balisage est construit. Des outils tels que Firebug et Chrome Developer Tools facilitent l'inspection du code, mais si je veux copier une section isolée et jouer avec elle localement, il serait difficile de copier tous les éléments individuels et leurs css associés. Et probablement autant de travail pour sauver la source entière et couper le code sans rapport.

ce serait génial si je pouvais faire un clic droit sur un noeud dans Firebug et avoir une option "Enregistrer HTML+CSS pour ce noeud". Un tel outil existe pas? Est-il possible d'étendre les outils de développement Firebug ou Chrome pour ajouter cette fonctionnalité?

358
demandé sur Édouard Lopez 2011-02-06 06:22:48

16 réponses

SnappySnippet

j'ai finalement trouvé un peu de temps pour créer cet outil. Vous pouvez installer SnappySnippet à partir de Chrome Web Store. Il permet une extraction HTML+CSS facile à partir du noeud DOM spécifié (dernier inspecté). En outre, vous pouvez envoyer votre code directement à CodePen ou JSFiddle. Profitez-en!

SnappySnippet Chrome extension

autres caractéristiques

  • nettoie HTML (suppression d'attributs inutiles, correction d'indentation)
  • optimise CSS pour le rendre lisible
  • entièrement configurable (tous les filtres peuvent être désactivés)
  • fonctionne avec ::before et ::after pseudo-éléments
  • belle INTERFACE utilisateur grâce à Bootstrap & Plate-UI projets

Code

SnappySnippet est open source, et vous pouvez trouver le code sur GitHub .

mise en œuvre

depuis que j'ai appris beaucoup en faisant cela, j'ai décidé de partager certains des problèmes que j'ai vécu et mes solutions à eux, peut-être que quelqu'un va trouver intéressant.

première tentative-getMatchedCSSRules()

au début j'ai essayé de récupérer les règles CSS originales (provenant des fichiers CSS sur le site web). Assez étonnamment, c'est très simple grâce à window.getMatchedCSSRules() , cependant, il ne fonctionne pas bien. Le problème était que nous ne prenions qu'une partie des sélecteurs HTML et CSS qui concordaient dans le contexte de l'ensemble du document, qui ne concordaient plus dans le contexte D'un extrait HTML. Comme l'analyse et la modification des sélecteurs ne semblaient pas être une bonne idée, j'ai renoncé à cette tentative.

Deuxième tentative - getComputedStyle()

alors, j'ai commencé par quelque chose que @CollectiveCognition a suggéré - getComputedStyle() . Cependant, je voulais vraiment séparer CSS form HTML au lieu d'inclure tous les styles.

Problème 1-séparer CSS de HTML

la solution ici n'était pas très belle mais assez simple. J'ai assigné des ID à tous les noeuds dans le sous-arbre sélectionné et j'ai utilisé cet ID pour créer des règles CSS appropriées.

Problème 2-suppression des propriétés avec des valeurs par défaut

assigner des ID aux noeuds s'est bien passé, cependant j'ai découvert que chacune de mes règles CSS a ~300 propriétés rendant l'ensemble du CSS illisible.

Il s'avère que getComputedStyle() renvoie toutes les propriétés CSS possibles et les valeurs calculées pour l'élément donné. Certains d'entre eux où vide, certains avaient navigateur valeurs par défaut. Pour supprimer les valeurs par défaut, je devais les obtenir à partir du navigateur en premier (et chaque étiquette a des valeurs par défaut différentes). La solution était de comparer les styles de l'élément provenant du site Web avec le même élément inséré dans un vide <iframe> . La logique ici était qu'il n'y avait pas de feuilles de style dans un <iframe> vide , de sorte que chaque élément que j'ai ajouté n'avait que des styles de navigateur par défaut. De cette façon, j'ai pu me débarrasser de la plupart des propriétés qui étaient insignifiantes.

problème 3-Ne conserver que des propriétés sténographiques

la chose suivante que j'ai remarquée était que les propriétés ayant l'équivalent en sténo étaient inutilement imprimées (par exemple il y avait border: solid black 1px et puis border-color: black; , border-width: 1px itd.).

Pour résoudre cela, j'ai simplement créé une liste de propriétés qui ont abréviation équivalents et filtrée à partir de résultats.

problème 4-suppression des propriétés préfixées

le nombre de propriétés dans chaque règle était beaucoup plus bas après l'opération précédente, mais j'ai trouvé que je sill avait beaucoup de -webkit- propriétés préfixées que je n'ai jamais entendu parler de ( -webkit-app-region ? -webkit-text-emphasis-position ?).

Je me demandais si je devais garder l'une de ces propriétés parce que certaines d'entre elles semblaient utiles ( -webkit-transform-origin , -webkit-perspective-origin etc.). Je n'ai pas trouvé comment vérifier cela, cependant, et puisque je savais que la plupart du temps ces propriétés sont juste des ordures, j'ai décidé de les enlever tous.

problème 5-combinaison des mêmes règles CSS

le problème suivant que j'ai repéré était que les mêmes règles CSS sont répétées encore et encore (par exemple pour chaque <li> avec les mêmes styles exacts il y avait la même règle dans la sortie CSS créée).

Il s'agissait simplement de comparer des règles entre elles et de les combiner qui avaient exactement le même ensemble de propriétés et de valeurs. En conséquence, au lieu de #LI_1{...}, #LI_2{...} j'ai eu #LI_1, #LI_2 {...} .

problème 6-nettoyage et fixation de l'indentation HTML

comme j'étais satisfait du résultat, j'ai déménagé en HTML. Cela ressemblait à un gâchis, principalement parce que la propriété outerHTML la garde formatée exactement comme elle a été retournée par le serveur.

La seule chose dont le code HTML a été extrait de outerHTML était un simple reformatage du code. Puisque c'est quelque chose disponible dans chaque IDE, j'étais sûr qu'il y a un Bibliothèque JavaScript qui fait exactement cela. Et il s'avère que j'avais raison (jQuery-clean) . De plus, j'ai supprimé des attributs inutiles ( style , data-ng-repeat , etc.).

problème 7-filtres cassant CSS

Puisqu'il y a une chance que dans certaines circonstances les filtres mentionnés ci-dessus puissent casser CSS dans l'extrait, je les ai tous rendus optionnels. Vous pouvez les désactiver du Les paramètres dans le menu.

519
répondu Konrad Dzwinel 2015-02-03 08:07:40

les navigateurs Webkit (pas sûr à propos de FireBug) vous permettent de copier le HTML d'un élément facilement, donc c'est une partie du processus hors du chemin.

exécuter ceci (dans la console javascript) avant de copier le HTML pour un élément déplacera tous les styles calculés pour l'élément parent donné, ainsi que tous les éléments enfants, dans l'attribut style inline qui sera alors disponible en tant que partie du HTML.

var el = document.querySelector("#someid");
var els = el.getElementsByTagName("*");

for(var i = -1, l = els.length; ++i < l;){

    els[i].setAttribute("style", window.getComputedStyle(els[i]).cssText);

}

c'est un total hack et vous aurez beaucoup d'attributs CSS "junk" à parcourir, mais devrait au moins commencer.

48
répondu Collective Cognition 2011-02-07 18:59:09

j'ai posé cette question à l'origine, je cherchais une solution Chrome (ou FireFox), mais je suis tombé sur cette fonctionnalité dans Internet Explorer developer tools. À peu près ce que je cherche (sauf le javascript)

Element Source with Style

résultat:

Element Source with Style result

42
répondu kenwarner 2013-02-02 18:28:50

j'ai créé cet outil il y a des années dans le même but:

http://www.betterprogramming.com/htmlclipper.html

vous pouvez l'utiliser et l'améliorer.

29
répondu Florentin 2013-03-12 15:16:49

cela peut être fait par le Plugin Firebug appelé scrapbook

vous pouvez vérifier l'option Javascript dans le paramètre

enter image description here

Edit:

Ce peut aussi aider à

Firequark est une extension de Firebugg pour faciliter le processus de L'écran HTML Raclage. Firequark automatiquement extrait le sélecteur css pour un plusieurs html nœud(s) à partir d'une page web L'utilisation de Firebug (un développement web plugin pour Firefox). Le sélecteur css généré peut être fournie en entrée à scrapers d'écran html comme Scrapi à extraire de l'information. Firequark est construit pour libérer la puissance de css sélecteur pour l'utilisation de html écran raclage.

23
répondu Jitendra Vyas 2013-09-27 11:45:42

divclip est une mise à jour version de celui de Florentin Sardan htmlclipper

moderne, avec des améliorations: ES5, HTML5, CSS délimités...

vous pouvez extraire programmatiquement une div stylisée avec:

var html = require("divclip").bySel(".article-body");
console.log(html);

de Profiter de.

11
répondu ato3787045 2017-05-23 12:18:17

il n'y a pas besoin de plugins. Cela peut être fait très simplement avec Internet Explorer 11 native Developer Tools en un seul clic, très propre. Juste sur un élément et d'inspecter l'élément et cliquez-droit sur certains bloc et choisissez "Copier l'élément avec des styles". Vous pouvez le voir dans l'image ci-dessous.

il fournit le code css très propre, comme

.menu { 
    margin: 0;
}
.menu li {
    list-style: none;
}
8
répondu GarryOne 2015-03-06 13:50:16

récemment, j'ai créé une extension chrome "extrait Snippet" pour copier l'élément inspecté, html et seulement les questions CSS et médias pertinents à partir d'une page. Notez que cela vous donnerait le CSS pertinent réel

https://chrome.google.com/webstore/detail/extract-snippet/bfcjfegkgdoomgmofhcidoiampnpbdao?hl=en

5
répondu melwyn pawar 2015-09-09 16:11:19

un outil avec une solution unique pour ce que je ne connais pas, mais vous pouvez utiliser Firebug et Web Developer extension en même temps.

utilisez Firebug pour copier la section html dont vous avez besoin (inspecter L'élément) et le développeur Web pour voir quel css est associé à un élément (appelant le développeur Web "Afficher les informations de Style" - cela fonctionne comme "inspecter L'élément" de Firebug, mais au lieu d'afficher le balisage html il montre le CSS associé avec ce balisage.)

Ce n'est pas exactement ce que vous voulez (un clic pour tout), mais c'est assez proche, et au moins intuitif.

'View Style Information' result from Web Developer Extension

3
répondu GmonC 2011-05-19 03:24:58

http://clipboard.com fait ceci et assez bien. Bien que votre attente de la version copiée étant exactement comme dans l'original de sorte que vous pouvez jouer et apprendre avec elle, peut ne pas être réaliste.

3
répondu Moin Zaman 2012-07-17 08:07:37

j'ai aussi besoin de cette fonctionnalité sur Firebug! D'ici là, une autre approche consiste à utiliser ce "service en ligne 151920920" pour supprimer les classes et convertir les css en styles inline.

3
répondu Acyra 2012-12-27 07:38:22

il suffit de copier la partie que vous voulez à partir de la page Web et de la coller dans l'éditeur wysiwyg. Vérifiez la source html en cliquant sur le bouton "source" dans la barre d'outils de l'éditeur.

j'ai trouvé cela plus facile quand je travaillais sur un site Drupal. J'utilise WYSIWYG CKeditor.

2
répondu Kevin Siji 2013-08-29 07:03:57
jQuery.fn.extend({
getStyles: function() {
    var rulesUsed = [];
    var sheets = document.styleSheets;
    for (var c = 0; c < sheets.length; c++) {
        var rules = sheets[c].rules || sheets[c].cssRules;
        for (var r = 0; r < rules.length; r++) {
            var selectorText = rules[r].selectorText.toLowerCase().replace(":hover","");
            if (this.is(selectorText) || this.find(selectorText).length > 0) {
                rulesUsed.push(rules[r]);
            }
        }
    }
    var style = rulesUsed.map(function(cssRule) {
        return cssRule.selectorText.toLowerCase() + ' { ' + cssRule.style.cssText.toLowerCase() + ' }';
    }).join("\n");
    return style;
}
});

utilisation: $("#login_wrapper").getStyles()

2
répondu geekbytes0xff 2013-10-07 06:38:12

j'ai adapté le top réponse votée comme un bookmarklet de dragabble.

il suffit de visiter cette page et de glisser le bouton" Run jQuery Code " dans votre barre de signet.

0
répondu ripper234 2017-05-23 11:54:47

il y a un plugin firefox qui sauve le HTML de la page entière, CSS, etc.. mais je n'ai pas vu un seul qui n'partielle enregistrer.

je me souviens IE 5.5 a ce que vous recherchez ;)

0
répondu Chris Abrams 2012-12-27 07:34:39

j'ai traversé tous les outils mentionnés comme réponse ici. Mais ils donnent répété, sale HTML CSS avec beau visage que vous regardiez vers le haut sur. Ils ne te donnent pas de JS.

Ce que je fais:

  1. D'abord je filtre des annonces qui ne sont pas obligatoires sur la page
  2. ensuite , sauvegardez la page web complète avec les ressources de lien.
  3. Supprimer HTML, CSS et JS inutiles
  4. continue de déverrouiller ressources un par un avec soin.
0
répondu Amit Kumar Gupta 2013-10-11 02:53:50