苺は甘いアップローダー攻略法

ひとつのウェブページの攻略法を共有することによって、ちょっとしたtipsを期待するエントリー。
今回対象にするのは、老舗の苺は甘いアップローダー

今回の目的

  • 各アップロード板までたどり着くのにいちいち小さい所をクリックしたりするのが面倒なので、それを省きたい。
  • 以前つくった広告不可視化関数(広告削除用の関数を改造してみた(その2))を使おうとおもっても広告にマーキングが施されておらず、いわゆるノラ広告だらけで手を焼いていた。それを何とかしたい。
  • これとこれを残すみたいな処理にDOM rangeを使ってみる。
  • まとめると、アップローダ一覧のページを最適化する。各アップローダのページの最適化は今回は対象外。

1-1 まずはトップページ攻略

矢印の部分がアップローダ一覧ページへのリンクになっている。まずはそれを省く。

1-2 苺の罠

  • アップローダ一覧のページは頻繁にアドレスを変えるので動的に対応しないといけない。

1-3 トップページ攻略法

xpathをつかってアップローダ一覧ページへのリンクを参照して、そこに自動で飛ぶ。
これでクリックする手間が省ける。

1-4 ソースコード(トップページ)

//トップページ
if(location.href == 'http://toku.xdisc.net/'){

    var ichigodoor = document.evaluate('//a[text()="1M〜120Mまで各種"]', document, null, 7, null);
    GM_setValue('ichigo_href',ichigodoor.snapshotItem(0).href);
    if(location.href != ichigodoor.snapshotItem(0).href) location.href = ichigodoor.snapshotItem(0).href;

}

1-5 気になるとこ解説

  • GM_setValueを使うのは、一覧ページに変移したとき再びスクリプトが実行され、変数に一時保存できないから。(ほかに思いつかない)

2-1 続いてはアップローダ一覧ページ攻略

以下の画像のようにアップローダへのリンクだけを残し、ほかを消す。

2-2 ソースコード(一覧ページ)

//一覧ページ
if(location.href == GM_getValue('ichigo_href')){

    var td_one = document.evaluate('//td[@width="389"]', document, null, 7, null);
    //console.log(td_one.snapshotLength)

    var td_two = document.evaluate('//td[@bgcolor="#ffffff"][@colspan="2"][iframe]', document, null, 7, null);
    //console.log(td_two.snapshotLength)


    var range = document.createRange();
    range.selectNode(td_one.snapshotItem(0));
    range.selectNode(td_two.snapshotItem(0));

    documentFragment = range.cloneContents();

    document.body.innerHTML = '';
    document.body.appendChild(documentFragment);

    //iframe全消し
    var adframe = document.evaluate('//iframe', document, null, 7, null);
    for(var i=0;i<adframe.snapshotLength;i++){ adframe.snapshotItem(i).style.visibility = 'hidden'; }

}

2-3 気になるとこ解説

xpathで各アップローダへのリンクを参照し、rangeにクローンをつくって、まっさらになったbodyにクローンを追加している。

検証用インストール

ichigo_uploader.user.js

実験場所:苺は甘いアップローダー

感想

  • rangeの使い方あってるのかな。