JavaScript: pageElementの推定

javascript:(function(){
const THRESHOLD = 10000;
var bottoms = [], ary = [];
var xp = document.evaluate('/html/body/descendant::*[not(child::*)]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i=0,l=xp.snapshotLength; i<l; i++) bottoms[i] = xp.snapshotItem(i);
bottoms.forEach(function(v){
    var s = v.offsetWidth * v.offsetHeight, t;
    while ((v = v.parentNode) && !(/body/i).test(v.nodeName)) {
        t = v.offsetWidth * v.offsetHeight;
        if (s > THRESHOLD) ary.push({node: v, ratio: t/s});
        s = t;
    }
});
ary.sort(function(a,b){return b.ratio - a.ratio;});
ary[0].node.style.border = "5px solid red";
})();

pageElement推定


子ノードとの描画サイズ比から推定。

うーん、ぼちぼち。

追記

親ノードも考慮する版。

javascript:(function(){
const THRESHOLD = 10000;
var bottoms = [], ary = [];
var xp = document.evaluate('/html/body/descendant::*[not(child::*)]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i=0,l=xp.snapshotLength; i<l; i++) bottoms[i] = xp.snapshotItem(i);
bottoms.forEach(function(v){
    var s = v.offsetWidth * v.offsetHeight, t, u, p;
    v = v.parentNode;
    t = v.offsetWidth * v.offsetHeight;
    while (!(/body/i).test(v.nodeName)) {
        p = v;
        do {
            p = p.parentNode;
            u = p.offsetWidth * p.offsetHeight;
        } while (!(u > THRESHOLD))
        if (s > THRESHOLD) ary.push({node: v, ratio: t*t/s/u});
        s = t;
        t = u;
        v = v.parentNode;
    }
});
ary.sort(function(a,b){return b.ratio - a.ratio;});
ary[0].node.style.border = "5px solid red";
})();

pageElement推定(親も使う)


前者でも十分ぽいなあ。

Comment: 0

Comment Form
Name
URL
Comment

Trackback: 1

Trackback URL
http://mayokara.info/note/trackback/244
Attention
スパム対策のため、当エントリへのリンクがないトラックバックをブロックしています。
ブログの本文を取得するAPIのようなテスト
研究開発 2008/07/06 07:58
ブログの本文を取得するAPIのようなテスト JavaScript: pageElementの推定 phpだけで作りました。 http://updatenews.sub.jp/c/extractparser.php?u= このようにして呼び出します。 プレーンテキストで本文を返すと思います。 本文が取得できたかどうかはロ....