Убиваем рекламу на bash.org.ru, или, Greasemonkey в действии

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

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

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

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

Ранее я уже приводил пример пользовательского скрипта для извлечения 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);
}

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

Вложения:

Автор: ; опубликовано в: JavaScript; метки: bash.org.ru, Greasemonkey, JavaScript, XPath, реклама
3
Июл
2008

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

  1. То же самое для 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);
    }
  2. SaltyDog

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

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

  3. Саша

    Здравствуйте.
    Помогите пожалуйста разобраться. У меня установлен GreaseMonkey, юзаю я FF? но со скриптами разобраться не могу.
    Мне нужен скрипт для обновления страницы на который кликнуть и страница обновляется (а лучше просто повторно заходит, чтоб не тянуть с инета картинки и все прочее, у меня траф платный).
    Я сам не знаю яву, но нарыл в инете такую строчечку, шапку написал сам:

    [-]
    View Code Javascript
    // ==UserScript==
    // @name           refresh
    // @namespace      www
    // @include        http://www.heroeswm.ru/forum.php
    // ==/UserScript==

    <a href="#">обновить</a>

    И это не работает, ссылка не появляется.
    пробовал другие ява скрипты (типа часы, что-то еще) тоже с инета, и они тоже не работали, хотя при вставлянии их в html страницу все работало. Скачат заточеный скрипт под GM, называется google extrim, так он работает, значит ошибка все таки в моем скрипте.
    посоветуйте что-то пожалуйста.

    • Саша,

      Здесь несколько проблем:

      1. GreaseMonkey — это пользовательский JavaScript, не HTML. Если Вы хотите добавить ссылку, делайте это через JavaScript, например, так (я не проверял работоспособность примера, ибо хочу спать):
        [-]
        View Code Javascript
        var a = document.createElement('a');
        a.href = '#';
        document.getElementsByTagName('body')[0].appendChild(a);
      2. Вас жестоко обманули, код <a href="#">обновить</a> не обновит страницу. Переходы по якорю не обновляют страницу.
      3. Для сервера нет никакой разницы между нажатием кнопки «Обновить» и кодом, который действительно обновляет страницу: <span onclick="location.reload();">Обновить</span>. Будут ли загружаться картинки или нет, зависит от сервера (отдаёт ли он заголовки, разрешающие кэширование) и браузера (настроек кэша). Так что затея с таким скриптом — увы, пустая трата времени.
  4. Саша

    Ни чего не понял, но за направление в нужную сторону спасибо, и за время спасибо. Думаю разберусь, главное идти в правильную сторону.

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा