Ars Longa, Vita Brevis

Убираем тупую рекламу с bash.org.ru при помощи GreaseMonkey

Многие (если не все) знакомы с ресурсом bash.org.ru. И, хотя юмор там в последнее время очень тупой, старые шутки почитать временами можно. Помимо тупого юмора лично меня на bash.org.ru больше всего раздражает не менее тупая реклама :-) И если со всякими iframe и иже с ним AdBlock может бороться, то со вставками вида

Дэвид Блэйн раскукожил Firefox! Теперь в нём Яндекс!

он уже не справляется (так как они вставляются в вывод на сервере). Достал меня Дэвид Блейн. И Яндекс меня достал. И еще много что меня достало. Наверное, надо отдохнуть. Но речь не об этом. В общем, если меня что-то раздражает, я от этого избавляюсь (если читать, то с комфортом). Задачка как раз для Greasemonkey.

Ранее я уже приводил пример пользовательского скрипта для извлечения ASIN с amazon.com. Здесь используется нечто похожее.

Идея состоит в том, что для нормальных цитат после <hr class="iq"> сразу идет <script type="text/javascript" language="JavaScript"> и только потом <div class="q">, а в случае с рекламой <script> отсутствует; всё показано на рисунке:
XML-дерево

Переходим к коду.

// ==UserScript==
// @name          Bash.org.ru Ads Remover
// @namespace     http://sjinks.org.ua/
// @include       http://bash.org.ru/*
// @exclude       http://bash.org.ru/abysstop
// @exclude       http://bash.org.ru/abyssbest
// ==/UserScript==

var x = document.evaluate(
    '//div[@id="quotes"]/hr[@class="iq"]/following-sibling::*[position()=1][@class="q"]',
    document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null
);

for (var i=0; i<x.snapshotLength; ++i) {
    var a = x.snapshotItem(i);
    while (1) {
        var b = a.nextSibling;
        a = a.parentNode.removeChild(a);
        if (b.tagName && 'div' == b.tagName.toLowerCase()) {
            a = b;
        }
        else {
            break;
        }
    }
}

x = document.evaluate('//iframe', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
for (i=0; i<x.snapshotLength; ++i) {
    a = x.snapshotItem(i);
    a.parentNode.removeChild(a);
}

Устанавливаем, активируем и не смотрим на рекламу. Всё-таки XPath — это вещь!

Связанные записи

Комментарии к статье "Убиваем рекламу на bash.org.ru, или, Greasemonkey в действии" (2) »

  1. [July 3, 2008 18:58] Vladimir:

    То же самое для tak-to.ru:

    [-]
    // ==UserScript==
    // @name          tak-to.ru Ads Remover
    // @namespace     http://sjinks.org.ua/
    // @include       http://tak-to.ru/*
    // ==/UserScript==

    var x = document.evaluate(
        '(//div[@id="middle"]//table//td[position()=3])|(//div[@id="middle"]//div[not(@id)])',
        document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null
    );

    for (var i=0; i<x.snapshotLength; ++i) {
        var a = x.snapshotItem(i);
        a.parentNode.removeChild(a);
    }
    #1
  2. [July 14, 2008 23:31] SaltyDog:

    Читать со страницы - прошлый век уже :)
    Слава богу, пока не догадались рекламу в rss пихать. И вообще, freebsd.rusnet.org.ru/bash педалит %)

    з.ы. задолбался угадывать капчу :(

    #2

RSS feed for comments on this post. TrackBack URL

Оставить комментарий к записи "Убиваем рекламу на bash.org.ru, или, Greasemonkey в действии"

Изображения должны быть включены!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Subscribe without commenting