既存のサイトからHTML + CSS + JSを選択的にコピーするツール[終了]


403

ほとんどのWeb開発者と同様に、マークアップがどのように構築されているかを確認するために、Webサイトのソースを時々見たいと思います。FirebugやChrome Developer Toolsなどのツールを使用すると、コードを簡単に検査できますが、分離されたセクションをコピーしてローカルで操作したい場合、個々の要素とそれに関連付けられているすべてのCSSをコピーするのは面倒です。そしておそらく、ソース全体を保存し、無関係なコードを削除するのと同じくらい多くの作業が必要です。

Firebugでノードを右クリックして、[このノードのHTML + CSSを保存する]オプションがあると便利です。そのようなツールはありますか?FirebugまたはChromeデベロッパーツールを拡張してこの機能を追加することはできますか?


4
追加したいだけです(あなたが説明するツールではなく、答えを出さない)。クロムを使用する場合は、要素を選択して、CSSセクションの右側にある「計算済みスタイル」を確認できます。リスト全体をスタイルにコピーして貼り付けることができます。これは、必要なツールからの追加のステップですが、探しているCSSを提供します。
riv_rec

1
質問に対する完全な回答ではありませんが、[要素]タブのChrome開発ツールのF2キーを押すと、選択したDOM要素とサブツリーが開き、インライン編集(および必要に応じてコピー)ができます。
2013

Chromeの非常に興味深い拡張機能の1つは、「すべてのリソースを保存」です。インストールしてから、Chrome Dev Toolタブの「Resources Saver」に移動してダウンロードしてください。
dimeros

回答:


580

SnappySnippet

ようやくこのツールを作成する時間を見つけました。SnappySnippetはGithubからインストールできます。指定された(最後に検査された)DOMノードからHTML + CSSを簡単に抽出できます。さらに、CodePenまたはJSFiddleにコードを直接送信できます。楽しい!

SnappySnippet Chrome拡張機能

その他の特徴

  • HTMLをクリーンアップします(不要な属性を削除し、インデントを修正します)
  • CSSを最適化して読みやすくします
  • 完全に構成可能(すべてのフィルターをオフにすることができます)
  • ::beforeおよび::after擬似要素で動作します
  • BootstrapFlat-UIプロジェクトのおかげで素晴らしいUI

コード

SnappySnippetはオープンソースであり、GitHubでコードを見つけることができます。

実装

私はこれを行う間に多くのことを学んだので、私が経験した問題のいくつかとそれらに対する私の解決策を共有することに決めました、多分誰かがそれを面白いと思うでしょう。

最初の試み-getMatchedCSSRules()

最初に、元のCSSルール(WebサイトのCSSファイルから取得)を取得しようとしました。驚くべきことに、これはのおかげで非常に簡単ですがwindow.getMatchedCSSRules()、うまくいきませんでした。問題は、ドキュメント全体のコンテキストでは一致していたが、HTMLスニペットのコンテキストでは一致しなくなったHTMLおよびCSSセレクターの一部しか取得していないことでした。セレクターの解析と変更は良い考えのようには思えなかったので、私はこの試みをあきらめました。

2回目の試行-getComputedStyle()

次に、@ CollectiveCognitionが提案したものから始めました- getComputedStyle()。ただし、すべてのスタイルをインライン化するのではなく、CSSフォームのHTMLを分離したかったのです。

問題1-CSSをHTMLから分離する

ここでの解決策はあまり美しくありませんでしたが、非常に簡単でした。選択したサブツリーのすべてのノードにIDを割り当て、そのIDを使用して適切なCSSルールを作成しました。

問題2-デフォルト値でプロパティを削除する

ノードへのIDの割り当ては適切に機能しましたが、CSSルールのそれぞれに約300のプロパティがあり、CSS全体を判読できないことがわかりました。は、指定された要素に対して計算されたすべての可能なCSSプロパティと値
getComputedStyle()返すことがわかりました。それらのいくつかは空であり、いくつかはブラウザのデフォルト値を持っていました。デフォルト値を削除するには、まずブラウザーからそれらを取得する必要がありました(各タグには異なるデフォルト値があります)。解決策は、Webサイトからの要素のスタイルを、空のに挿入された同じ要素と比較することでした<iframe>。ここでのロジックは、空のにはスタイルシートがない<iframe>ため、そこに追加した各要素にはデフォルトのブラウザースタイルしかありませんでした。このようにして、重要ではないプロパティのほとんどを取り除くことができました。

問題3-省略プロパティのみを保持する

次に気付いたのはborder: solid black 1px、同等の省略形を持つプロパティが不必要に印刷されたということです(たとえばborder-color: black;border-width: 1pxitd があり、次にそれがありました)。
これを解決するために、簡単な同等物を持つプロパティのリストを作成し、結果からそれらを除外しました。

問題4-接頭辞付きのプロパティの削除

各ルールのプロパティの数は、前の操作後に有意に低かったが、私はたくさんの持っていた敷居は検出されませんでした-webkit-(私は聞いたことがないという接頭辞プロパティを-webkit-app-region-webkit-text-emphasis-position?)。
これらのプロパティのいくつかは有用であると思われたため(等)-webkit-transform-origin、これらのプロパティのいずれかを保持する必要があるかどうか疑問に思いました-webkit-perspective-origin。ただし、これを確認する方法はわかりません。また、ほとんどの場合、これらのプロパティは単なるゴミであることがわかっていたため、すべて削除することにしました。

問題5-同じCSSルールを組み合わせる

私が見つけた次の問題は、同じCSSルールが繰り返し繰り返されることです(たとえば<li>、まったく同じスタイルのそれぞれに対して、作成されたCSS出力に同じルールがあった)。
これは、ルールを互いに比較し、まったく同じプロパティと値のセットを持つルールを組み合わせることだけの問題でした。その結果、#LI_1{...}, #LI_2{...}私が得たのではなく#LI_1, #LI_2 {...}

問題6-HTMLのインデントをクリーンアップして修正する

結果に満足していたので、HTMLに移動しました。これは混乱のように見えました。主に、outerHTMLプロパティがサーバーから返されたとおりにフォーマットされているためです。
HTMLコードがouterHTML必要とする唯一のものは、単純なコードの再フォーマットでした。これはすべてのIDEで利用できるものなので、まさにそれを行うJavaScriptライブラリがあることを確信しました。そして、私は正しかっことがわかりました(jquery-clean)。しかも、私は不要な属性除去、余分な(持っているstyledata-ng-repeatなど)。

問題7-CSSを壊すフィルター

状況によっては、上記のフィルターによってスニペットのCSSが壊れる可能性があるため、これらはすべてオプションにしています。設定メニューから無効にできます。


@KonradDzwinel、私はページ内でプログラムでこれを行う方法を探しています(特定のDOMサブツリーを印刷するには、それを新しいウィンドウにコピーしてくださいprint())。JSだけでこれを呼び出し可能関数として作成するのは(あなたや誰かがあなたのリポジトリをフォークするのを探すのに)どのくらい難しいでしょうか?
Hashbrown 2013年

@Hashbrownメールを送ってください。詳細を話し合うことができます。かなり簡単になると思います。
Konrad Dzwinel 2013年

@KonradDzwinel努力に感謝しますが、php関数 'file_get_contents($ url)'を使用してノード要素を取得したい場合、解決策はありますか?ここに私の投稿があります:stackoverflow.com/questions/21419857/ …
Yassine edouiri 2014年

すごい仕事!しかし、要素に作用するjsコードを含めることは可能ですか?
t31321 14

1
@KonradDzwinel誰かがすでに私を殴っています:github.com/kdzwinel/SnappySnippet/issues/37
David Keaveny、2016

52

私は当初、Chrome(またはFireFox)ソリューションを探していたときにこの質問をしましたが、Internet Explorer開発者ツールでこの機能を偶然見つけました。私が探しているもののほとんど(JavaScriptを除く)

スタイル付き要素ソース

結果:

要素ソースとスタイル結果


5
IE11も機能します。ただし、このオプションは、要素を直接右クリックしてアクセスできます。
ロドルフォホルヘネメールノゲイラ

15
うわー、ついにIE開発ツールが優れている例です。
dmnd 2014

7
このページに記載されている他のすべてのソリューションと比較してみました。生成されたCSS + HTMLは元のcss名を維持しながら非常にクリーンです。つまり、htmlは元のCSSと同じです。
xoofx 2014

素晴らしい聖なるがらくたです。@xoofxの調査結果を確認できます。HTMLマークアップは同じままですが、スタイルに完全に一致するために必要なスケルトンの親ラッピング要素も出力されることについてコメントしたいと思います。
Daniel Sokolowski、2015年

これを使用しました。snappyスニペットを正しく機能させることができませんでした(複雑なhtmlおよびcss)。これが実際に機能したとは信じられません。そして、人々が知っているように、私はエッジだけのエクスプローラーでこの機能を見ていませんでした。
ワトソン

51

Webkitブラウザー(FireBugについては不明)を使用すると、要素のHTMLを簡単にコピーできます。これは、プロセスの一部です。

要素のHTMLをコピーする前にこれを(JavaScriptコンソールで)実行すると、指定された親要素のすべての計算されたスタイルとすべての子要素が、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);

}

これは完全なハックであり、多くの「ジャンク」CSS属性を通り抜けることができますが、少なくともあなたは始めるべきです。


3
素晴らしい答えですが...実際の答えとは関係ありません。for... loop構文とはどうでしょうか。それは私には難読化されたように読みます。
スティーブキャンベル

1
これは素晴らしいです。ルート要素を逃してしまいます。これも追加してください:el.setAttribute( "style"、window.getComputedStyle(el).cssText);
Karman Kertesz

Chromeコンソールでは、.querySelectorがnullを返しました。したがって、次のように変更すると、機能します。var el = document.getElementById( "#someid"); el.setAttribute( "style"、window.getComputedStyle(el).cssText); var els = el.getElementsByTagName( "*"); for(var i = -1、l = els.length; ++ i <l;){els [i] .setAttribute( "style"、window.getComputedStyle(els [i])。cssText); }
Viktor Tango


25

これはスクラップブックと呼ばれるFirebugプラグインで実行できます

設定でJavaScriptオプションを確認できます

ここに画像の説明を入力してください

編集:

これも役立ちます

Firequarkは、Firebugの拡張機能であり、HTML画面のスクレイピングのプロセスを支援します。Firequarkは、Firebug(FirefoxのWeb開発プラグイン)を使用して、Webページから単一または複数のHTMLノードのCSSセレクターを自動的に抽出します。生成されたcssセレクターは、情報を抽出するためのScrapiなどのHTMLスクリーンスクレイパーへの入力として指定できます。Firequarkは、HTML画面スクレイピングを使用するためのCSSセレクターの能力を発揮するように構築されています。


スクラップブックは見栄えがします-残念ながら、最新バージョン(1.4.5)とレビューで推奨された以前のバージョン(1.4.3)の両方が、OSX / FF3.6.1では機能しません。誰もがこれを働いていますか?
peteorpeter、

保存するノードをより正確に選択できればいいのですが、これはかなりうまくいきました
ケンワーナー、

1
これはちょっと便利ですが、必要なCSSを持つページ要素を別のページに移動するという私のニーズを解決しませんでした。スクラップブックは、ページの選択された部分に必要かどうかに関係なく、すべてのページのcssをコピーし、スタイルが別のページのcssと衝突するのを防ぐのに役立つcssの書き換えを行いません。
mc0e

13

divclipは FlorentinのSardan年代の更新版です htmlclipper

最新の機能拡張:ES5、HTML5、スコープ付きCSS ...

あなたはプログラムで様式化されたdivを抽出することができます:

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

楽しい。


偉大な者!魅力のように動作します!Chromeで実行できるように変更を加えました。'export'および 'require'依存関係を削除し、それらをchromeスニペットにコピーするだけです。次にコンソールで、タイプcopy(divclip.bySel('.topbar'))すると、処理された出力がクリップボードにコピーされます!;)
ケン

エラーがあります:shellprod.msocdn.com/16.00.1692.002/en-US/JSC/O365ShellG2Plus.js:21 'DOMMessage'で 'postMessage'を実行できませんでした:提供されたターゲットオリジン( ' portal.office.com')は受信者ウィンドウの起点と一致しない( 'null')。
スラバ

10

プラグインは必要ありません。Internet Explorer 11のネイティブ開発者ツールを使用して、ワンクリックで簡単に実行できます。要素を右クリックしてその要素を調べ、ブロックを右クリックして[スタイル付きの要素をコピー]を選択します。下の画像で確認できます。

それはのような非常にきれいなCSSコードを提供します

.menu { 
    margin: 0;
}
.menu li {
    list-style: none;
}

うわー、これはMicrosoft Edgeで完全に機能しました。htmlclipperとsnappysnippetを試しましたが、コピーしようとしている要素の応答性を維持するのに問題がありました。
マット

これは驚くべきことであり、完璧に機能します。
snit80

5

最近、検査された要素、html、および関連するcssとメディアクエリのみをページからコピーするためのクロム拡張「eXtractスニペット」を作成しました。これにより、実際に関連するCSSが得られます。

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


これがすべてのセレクターを元のように維持する方法が好きです。
ハジャミー

1
これはsnappyスニペットのクロム拡張とどのように比較しますか?
Patoshiパトシ

3

このための単一のソリューションを備えたツールはわかりませんが、FirebugとWeb Developer拡張機能を同時に使用できます。

Firebugを使用して必要なhtmlセクション(要素の検査)をコピーし、Web開発者が要素に関連付けられているcssを確認します(Web開発者の「スタイル情報の表示」の呼び出し-Firebugの「要素の検査」のように機能しますが、htmlを表示する代わりにマークアップは、そのマークアップに関連付けられたCSSを示します)。

それはまさにあなたが望むものではありません(すべてについてワンクリック)が、それはかなり近く、そして少なくとも直感的です。

Web Developer Extensionからの「スタイル情報の表示」結果


これは私がやっていることですが、各要素のCSSを手動でコピーする必要があります。OPが理想的に望んでいるのは、要素とすべてのネストされた要素に影響を与えるCSSスタイルをコピーできるものです。HTMLの場合と同じように、一度にコピーできます。
Muhd 2013年

3

Firebugにもこの機能が必要です。それまでは、このオンラインサービスを使用してクラスを削除し、CSSをインラインスタイルに変換する方法もあります。


3

http://clipboardjs.comはこれをかなりうまく行います。コピーされたバージョンがオリジナルとまったく同じであるため、それを試して学習できるという期待は現実的ではありません。


2

必要な部分をWebページからコピーして、wysiwygエディターに貼り付けるだけです。エディターのツールバーの「ソース」ボタンをクリックして、HTMLソースを確認します。

Drupalのサイトで作業しているときに、これが最も簡単な方法であることがわかりました。私はwysiwyg CKeditorを使用しています。


2
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;
}
});

使用法:$("#login_wrapper").getStyles()


私のニーズでは、これはgetComputedStyleの制限を回避するため、非常に有望に見えます。JavaScriptのnoobを使いすぎて、CSSの実際のテキストを取得する方法を確認できません。
mc0e 2015

使用方法をのjQuery代わりに使用するように変更しました。これにより、$少し方法がSecurityError: The operation is insecure. わかりますが、ポインタが表示されますか?
mc0e

0

私はトップ投票の回答をドラッグアブルのブックマークレットとして採用しました。

このページにアクセスし、「jQueryコードの実行」ボタンをブックマークバーにドラッグしてください。


1
エラー:エラー:SyntaxError:終了していない文字列リテラル
Barney

@Barney:彼は、答えをそこにコピーして、そこからスニペットを作成する必要があることを意味します。答えではありませんが、答えではなくコメントにすることをお勧めします
Mo Hrad A


0

ここで回答として言及したすべてのツールを調べました。しかし、それらはあなたが見つめていた美しい顔をした、汚いHTML CSSを繰り返し提供します。彼らはあなたにJSを与えません。

私がやること:

  1. 最初に、ページに不要な広告をフィルタリングします
  2. 次に、完全なWebページをリンクリソースとともに保存します。
  3. 不要なHTML、CSS、JSを削除する
  4. リソースのリンクを1つずつ慎重に解除していきます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.