digital 千里眼 @abp_jp

アナログな日常とデジタルの接点

Remove It Permanently(RIP)を使った広告ブロック

  • Adblock Plus でも Proxy 使ったフィルタリングやブロックリストでさえも消すのが難しい広告がある
  • 例えば...ただの文字列リンクがそうだ(しかもタグの id 属性class 属性 がまったくない...)

今回のテーマ先日紹介した XPath を使って広告を消してみよう

消しにくい広告の例として「はてなアンテナ」画面
Before After
  • この広告の特徴
    • id属性 class 属性等の余分な属性がない
    • リンクの文字列に [PR] って文字列が含まれている程度

最近このように Adblock Plus 対策なのか目印となる属性が設定されていないサイトが多い
これでも消せるのが XPath 指定のできる RIP

Adblock Plus と RIP の違い

  ブロックした広告の内部処理 ブロックしたい場所の指定方法
Adblock Plus ダウンロードしない
⇒ アクセス履歴が残らない
タグ属性(id, class, rel, etc)を使った独自記法
CSSセレクタ互換の記法(上級者向け)
あまり役に立たないURL記法
RIP 表示されなくなる(display: none)だけでダウンロードはされる
⇒ アクセス履歴は残る
XPath

やや Adblock Plus が有利

まずは Remove It Permanently(RIP) のインストール

RIPの設定

  • 特徴は対象(エレメント)の指定に XPath が使えること(XPATHXML系の技術)

設定例の説明
XPath 解説
//img[@alt="PR"]/.. alt属性が"PR"のimgタグの親タグ
//*[text()="PR"]/../.. "PR"というテキストノードの親ノードの親ノード
//*[contains(text(), "[PR]")]/.. "[PR]"という文字列を含むテキストノードを持つノードの親ノード

ここで言うノードとはエレメントと同じ意味

XPath については先日まとめました

補足
  • スクリーンショットのように対象サイトをすべて(*)にしたルールは操作性の都合上よくない。やってみればわかるが、ルールが追加しにくくなる

具体例1

before After
  • 以下をテキストファイルに保存して設定を import することができます
<Config version="1.0">
	<Page name="Mozilla Re-Mix" url="http://mozilla-remix.seesaa.net/*" enabled="true">
		<XPath comment="">id('content')/br</XPath>
	</Page>
</Config>

意味は...

"content"という id のついたタグの下にある br タグを消せ

具体例2

before After
<Config version="1.0">
	<Page name="湘南番外地" url="http://blog.livedoor.jp/nosvamos/*" enabled="true">
		<XPath comment="Annoying AD">//div[@class="blogbody"][1]</XPath>
		<XPath comment="Annoying AD">//h2[@class="date"][1]</XPath>
	</Page>
</Config>

意味は...

  • class 属性が "blogbody" で1つ目にマッチした div タグを消せ
  • class 属性が "date" で1つ目にマッチした h2 タグを消せ

具体例3

普段、google から見に来るのでトップページの広告ブロックは割愛(放置とも言う...orz)

  • 個別用語解説ページ用
before After
<Config version="1.0">
	<Page name="e-words.jp" url="http://e-words.jp/w/*.html" enabled="true">
		<XPath comment="">//*[text()="Ads by ListingPlus"]/..</XPath>
		<XPath comment="">(//tr/td/table)[last()]</XPath>
	</Page>
</Config>

意味は...

  • "Ads by ListingPlus"というテキストを含むタグの親タグを消せ
  • tr -> td -> table という階層にマッチするタグのうち最後を消せ
  • トップページ用
before After
<Config version="1.0">
	<Page name="e-Words トップページ" url="http://e-words.jp/" enabled="true">
		<XPath comment="">//*[contains(text(), "エンジニアキャリア情報")]</XPath>
		<XPath comment="">//*[contains(text(), "エンジニアキャリア情報")]/following-sibling::*[1]</XPath>
		<XPath comment="">//*[contains(text(), "IT求人検索") or contains(text(), "昨日のITニュース")]</XPath>
		<XPath comment="">//*[contains(text(), "IT求人検索") or contains(text(), "昨日のITニュース")]/following-sibling::*[1]</XPath>
		<XPath comment="">//*[contains(text(), "推薦書籍売上ランキング")]/..</XPath>
		<XPath comment="">//*[contains(text(), "推薦書籍売上ランキング")]/../following-sibling::*</XPath>
	</Page>
</Config>

そろそろ面倒になってきたのであとは設定だけ

<Config version="1.0">
	<Page name="CNET Japan" url="http://japan.cnet.com/*.htm" enabled="true">
		<XPath comment="">//*[contains(@class, "ad_")]</XPath>
		<XPath comment="">//*[contains(@class, "block_large_top")]</XPath>
	</Page>
</Config>
<Config version="1.0">
	<Page name="価格.com" url="http://*kakaku.com/*" enabled="true">
		<XPath comment="">//*[contains(text(), "広告")]</XPath>
		<XPath comment="">//*[text()="[PR]" or text()="PR" or text()="-PR-"]/..</XPath>
	</Page>
</Config>
  • Yahoo Japan
<Config version="1.0">
	<Page name="Yahoo!" url="http://*.yahoo.co.jp/*" enabled="true">
		<XPath comment="">//*[text()="[PR]" or text()="PR"]/..</XPath>
	</Page>
</Config>
  • TechCrunch 日本語版
<Config version="1.0">
	<Page name="TechCrunch Japanese" url="http://jp.techcrunch.com/*" enabled="true">
		<XPath comment="">//div[@class="entry"]/div[text()="PR" or text()="Ads by Overture"]</XPath>
	</Page>
</Config>
  • 連邦
<Config version="1.0">
	<Page name="連邦" url="http://renpou.com/*/index.html" enabled="true">
		<XPath comment="">/html/body/div</XPath>
	</Page>
</Config>


ℵ ニンニン ℵ