Narzędzia do selektywnego kopiowania HTML + CSS + JS z istniejących witryn [zamknięte]

Jak większość programistów, czasami lubię patrzeć na źródło stron internetowych, aby zobaczyć, jak ich znaczniki są zbudowane. Narzędzia takie jak Firebug i Chrome Developer Tools ułatwiają wgląd w kod, ale jeśli chcę skopiować izolowaną sekcję i pobawić się nią lokalnie, kopiowanie wszystkich poszczególnych elementów i powiązanych z nimi css byłoby uciążliwe. I prawdopodobnie tyle samo pracy, aby zapisać całe źródło i wyciąć niezwiązany kod.

Byłoby wspaniale gdybym mógł kliknij prawym przyciskiem myszy węzeł w Firebug i wybierz opcję "Zapisz HTML + CSS dla tego węzła". Czy takie narzędzie istnieje? Czy można rozszerzyć narzędzia programistyczne Firebug lub Chrome, aby dodać tę funkcję?

Author: Édouard Lopez, 2011-02-06

16 answers

SnappySnippet

W końcu znalazłem trochę czasu, aby stworzyć to narzędzie. Możesz zainstalować SnappySnippet ze sklepu Chrome Web Store. Pozwala na łatwe wyodrębnianie HTML+CSS z określonego (ostatnio sprawdzonego) węzła DOM. Dodatkowo możesz wysłać swój kod bezpośrednio do CodePen lub JSFiddle. Smacznego!

SnappySnippet Chrome extension

Inne funkcje

  • czyÅ›ci HTML (usuwa niepotrzebne atrybuty, naprawia wciÄ™cia)
  • optymalizuje CSS, aby go czytelne
  • w peÅ‚ni konfigurowalny (wszystkie filtry można wyÅ‚Ä…czyć)
  • DziaÅ‚a z ::before i ::after pseudoelementami
  • Å‚adny interfejs dziÄ™ki Bootstrap & projekty Flat-UI

Kod

SnappySnippet jest open source, a kod znajdziesz na Githubie .

Realizacja

Ponieważ nauczyłem się sporo podczas tworzenia tego, postanowiłem podzielić się niektórymi problemami, których doświadczyłem i moimi rozwiązaniami może komuś się spodoba.

Pierwsza próba-getMatchedCSSRules ()

Na początku próbowałem pobrać oryginalne reguły CSS(pochodzące z plików CSS na stronie). Co ciekawe, jest to bardzo proste dzięki window.getMatchedCSSRules(), jednak nie wyszło dobrze. Problem polegał na tym, że braliśmy tylko część selektorów HTML i CSS, które pasowały w kontekście całego dokumentu, które nie pasowały już w kontekście fragmentu HTML. Od parsowanie i modyfikowanie selektorów nie wydawało się dobrym pomysłem, zrezygnowałem z tej próby.

Druga próba-getComputedStyle ()

Potem zacząłem od czegoś, co zasugerował @CollectiveCognition- getComputedStyle(). Jednak naprawdę chciałem oddzielić CSS od HTML zamiast inlining wszystkich stylów.

Problem 1-oddzielenie CSS od HTML

Rozwiązanie tutaj nie było zbyt piękne, ale dość proste. Przypisałem identyfikatory do wszystkich węzłów w wybranym poddrzewie i użył tego ID do stworzenia odpowiednich reguł CSS.

Problem 2-Usunięcie właściwości z wartościami domyślnymi

Przypisywanie identyfikatorów do węzłów poszło dobrze, jednak dowiedziałem się, że każda z moich reguł CSS ma ~300 właściwości, dzięki czemu cały CSS jest nieczytelny.
Okazuje się, że getComputedStyle() zwraca wszystkie możliwe właściwości i wartości CSS obliczone dla danego elementu. Niektóre z nich były puste, niektóre miały domyślne wartości przeglądarki. Aby usunąć wartości domyślne musiałem je pobrać z najpierw przeglądarka (a każdy znacznik ma inne wartości domyślne). Rozwiązaniem było porównanie stylów elementu pochodzącego ze strony internetowej z tym samym elementem wstawionym do pustego <iframe>. Logika polegała na tym, że nie ma arkuszy stylów w pustym <iframe>, więc każdy element, który tam dodałem, miał tylko domyślne style przeglądarki. W ten sposób udało mi się pozbyć większości nieistotnych właściwości.

Problem 3-zachowanie tylko właściwości stenograficznych

Następna rzecz jaką mam zauważono, że właściwości mające odpowiedniki stenograficzne były niepotrzebnie drukowane (np. było border: solid black 1px i wtedy border-color: black;, border-width: 1px itd.).
Aby rozwiązać ten problem, po prostu stworzyłem listę właściwości, które mają skrócone odpowiedniki i odfiltrowałem je z wyników.

Problem 4-Usuwanie właściwości prefiksowych

Liczba właściwości w każdej zasadzie była znacznie niższa po poprzedniej operacji, ale odkryłem, że mam wiele -webkit- prefiksów właściwości że nigdy nie słyszałem (-webkit-app-region? -webkit-text-emphasis-position?).
Zastanawiałem się, czy nie powinienem zachować żadnej z tych właściwości, ponieważ niektóre z nich wydawały się przydatne (-webkit-transform-origin, -webkit-perspective-origin itd.). Nie wymyśliłem jednak, jak to zweryfikować, a ponieważ wiedziałem, że przez większość czasu te właściwości są tylko śmieciami, postanowiłem je wszystkie usunąć.

Problem 5-łączenie tych samych reguł CSS

Kolejnym problemem, który zauważyłem było to, że te same reguły CSS są powtarzane w kółko (np. dla każdego <li> z dokładnie te same style była ta sama reguła w utworzonym wyjściu CSS).
To była tylko kwestia porównywania ze sobą reguł i łączenia tych, które miały dokładnie ten sam zestaw właściwości i wartości. W rezultacie zamiast #LI_1{...}, #LI_2{...} dostałem #LI_1, #LI_2 {...}.

Problem 6-czyszczenie i naprawianie wcięć HTML

Ponieważ byłem zadowolony z wyniku, przeniosłem się do HTML. Wyglądało to na bałagan, głównie dlatego, że właściwość outerHTML zachowuje formatowanie dokładnie tak, jak została zwrócona z serwer.
Jedyną rzeczą, której kod HTML zaczerpnięty z outerHTML potrzebował, było proste formatowanie kodu. Ponieważ jest to coś dostępnego w każdym IDE, byłem pewien, że istnieje biblioteka JavaScript, która dokładnie to robi. I okazuje się, że miałem rację (jQuery-clean). Co więcej, mam zbędne atrybuty usuwania extra (style, data-ng-repeat itd.).

Problem 7-filtry Å‚amiÄ…ce CSS

Ponieważ istnieje szansa, że w pewnych okolicznościach wymienione powyżej filtry mogą złamać CSS w fragmencie, zrobiłem wszystkie z nich opcjonalne. Możesz je wyłączyć z menu Settings .

 519
Author: Konrad Dzwinel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-03 08:07:40

Przeglądarki Webkit (nie są pewne co do FireBug) pozwalają na łatwe kopiowanie HTML elementu, więc jest to jedna z części procesu z drogi.

Uruchomienie tego (w konsoli javascript) przed skopiowaniem HTML dla elementu spowoduje przeniesienie wszystkich obliczonych stylów dla danego elementu nadrzędnego, jak również wszystkich elementów potomnych, do wbudowanego atrybutu stylu, który będzie dostępny jako część 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);

}

To totalny hack i będziesz miał wiele "śmieci" atrybutów css przebrnąć przez to, ale przynajmniej powinieneś zacząć.

 48
Author: Collective Cognition,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-07 18:59:09

Początkowo zadałem to pytanie szukałem rozwiązania Chrome (lub FireFox), ale natknąłem się na tę funkcję w narzędziach programistycznych Internet Explorer. Prawie to ,czego szukam (poza javascript)

Źródło elementu ze stylem

Wynik:

Źródło elementu z wynikiem stylu

 42
Author: kenwarner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-02 18:28:50

Stworzyłem to narzędzie lata temu w tym samym celu:
http://www.betterprogramming.com/htmlclipper.html

Możesz go używać i ulepszać.

 29
Author: Florentin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-12 15:16:49

Można to zrobić za pomocą wtyczki Firebug o nazwie scrapbook

Możesz zaznaczyć opcję Javascript w ustawieniu

Tutaj wpisz opis obrazka

Edit:

To może również pomóc

Firequark jest rozszerzeniem Firebug aby wspomóc proces tworzenia ekranu HTML Skrobanie. Firequark wyodrębnia selektor css dla pojedynczego lub wiele węzłów html ze strony internetowej korzystanie z Firebug (tworzenie stron www wtyczka dla Firefoksa). Css selektor wygenerowane mogą być podane jako dane wejściowe do html screen scrapers jak Scrapi do wyciągnij informacje. Firequark jest stworzony, aby uwolnić moc css selektor do korzystania z ekranu html skrobanie.

 23
Author: Jitendra Vyas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-27 11:45:42

Divclip jest aktualizowany wersja Florentina Sardana htmlclipper

Z nowoczesnymi ulepszeniami: ES5, HTML5, scoped CSS...

Możesz programowo wyodrębnić stylizowany div za pomocą:

var html = require("divclip").bySel(".article-body");
console.log(html);
Smacznego.
 11
Author: ato3787045,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:17

Nie są potrzebne żadne wtyczki. Można to zrobić bardzo prosto z Internet Explorer 11 natywne narzędzia programistyczne za pomocą jednego kliknięcia, bardzo czyste. Wystarczy na elemencie i sprawdzić ten element, a następnie kliknij prawym przyciskiem myszy na jakimś bloku i wybierz "Kopiuj element ze stylami". Możesz to zobaczyć na poniższym obrazku.

Zapewnia kod css bardzo czysty, jak

.menu { 
    margin: 0;
}
.menu li {
    list-style: none;
}
 8
Author: GarryOne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-06 13:50:16

Ostatnio stworzyłem rozszerzenie chrome "eXtract Snippet" do kopiowania sprawdzonego elementu, html i tylko odpowiednich zapytań css i mediów ze strony. Zauważ, że to da ci rzeczywisty odpowiedni CSS

Https://chrome.google.com/webstore/detail/extract-snippet/bfcjfegkgdoomgmofhcidoiampnpbdao?hl=en{[4]

 5
Author: melwyn pawar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-09 16:11:19

Narzędzie z jednym rozwiązaniem tego nie wiem, ale można używać Firebug i Rozszerzenie Web Developer w tym samym czasie.

Użyj Firebug, aby skopiować sekcję html, której potrzebujesz (Inspect Element) i Web Developer, aby zobaczyć, który css jest skojarzony z elementem (wywołanie Web Developer "View Style Information" - działa jak Firebug "Inspect Element", ale zamiast pokazywać znaczniki html, pokazuje skojarzony CSS z tym znacznikiem).

To nie jest dokładnie co chcesz (jedno kliknięcie na wszystko), ale jest dość blisko, a przynajmniej intuicyjne.

Wynik 'Wyświetl informacje o stylu' z rozszerzenia Web Developer

 3
Author: GmonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-19 03:24:58
 3
Author: Moin Zaman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-17 08:07:37

Potrzebuję również tej funkcji na Firebug! Do tego czasu innym podejściem jest użycie Tej usługi online do usuwania klas i konwersji css na style inline.

 3
Author: Acyra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-27 07:38:22

Po prostu skopiuj żądaną część ze strony i wklej ją w edytorze wysiwyg. Sprawdź źródło html, klikając przycisk "Źródło" na pasku narzędzi edytora.

Znalazłem ten najprostszy sposób, gdy pracowałem na stronie Drupal. Używam wysiwyg CKeditor.

 2
Author: Kevin Siji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
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;
}
});

Użycie: $("#login_wrapper").getStyles()

 2
Author: geekbytes0xff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-07 06:38:12

Zaadaptowałem top voted answer jako dragabble bookmarklet.

Po prostu odwiedź tę stronę i przeciągnij przycisk" Uruchom Kod jQuery " na pasek zakładek.

 0
Author: ripper234,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:47

Istnieje wtyczka firefox , która zapisuje HTML, CSS, itp.. ale nie widziałem takiego, który częściowo uratuje.

Pamiętam, że IE 5.5 miało to czego szukałeś;)

 0
Author: Chris Abrams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-27 07:34:39

Przejrzałem wszystkie narzędzia wymienione jako odpowiedź tutaj. Ale dają powtarzany, brudny HTML CSS z piękną twarzą, na którą się gapisz. Nie dają Ci JS.

Co robiÄ™:

  1. najpierw filtruję reklamy, które nie są wymagane na stronie
  2. Następnie zapisz pełną stronę internetową wraz z linkami do zasobów.
  3. Usuń niepotrzebne HTML, CSS i JS
  4. [5]}ostrożnie odłączaj zasoby jeden po drugim.
 0
Author: Amit Kumar Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-11 02:53:50