Новые возможности Хабра: как отписаться от пользователей и рекламных блогов

Многие на Хабре спрашивают, как отфильтровать посты отдельных авторов и корпоративных блогов. Совсем недавно эта возможность появилась – правда, для этого необходима последняя версия блокировщика Adblock.

Новые возможности Хабра: как отписаться от пользователей и рекламных блогов

Для тех, кому не хочется читать дальше, просто приведу код фильтра Adblock для отписки от постов одного из авторов.

geektimes.ru#?#li:-abp-has(a.user-info[href*="username"])

Правда, работает это не во всех браузерах, и не во всех случаях. Для тех, кому интересно, как и когда это работает, прошу под кат.

Возможность такой фильтрации появилась с появление в новых версиях Adblock так называемых псевдоселекторов CSS, которых нет в CSS обычном. Они позволяют заблокировать родительский элемент, если выполняется какой-то условие в дочернем элементе.

Для начала, надо убедиться, что в вашей версии браузера и адблока поддерживается такая возможность. Новый синтаксис работает в Adblock Plus версий 1.13.3 и выше для Chrome и Opera. Также, с 6 ноября возможность появилась в Adblock Plus 3.0 для Firefox. Но это верно только для новых браузеров, например у меня в Хроме 57 версии такая опция есть, а вот в Хроме 49 версии, которой я пользуюсь обычно, возможность не поддерживается.

Проверить это можно, введя фильтр geektimes.ru#?#img Если при этом все картинки на сайте исчезнут, новые возможности включены. Если ничего не изменится – значит, надо обновляться.

Как работают псевдоселекторы, подробно описано здесь в секции «Extended CSS selectors». Там же есть и примеры. Для начала, при написании фильтра надо заменить domain.com##selector на domain.com#?#selector (имя домена вводить обязательно). Этот синтаксис и включает механизм псевдоселекторов. Сам селектор пишется в виде :-abp-properties(свойства) или :-abp-has(элементы) Для элементов в скобочках используется тот же синтаксис, что и в самом адблоке. Поддерживается также вложенность псевдоселекторов.

Таким образом, для блокировки всего поста достаточно найти в нём хотя бы одно характерное поле, к примеру атрибут href с именем автора, чтобы можно было заблокировать весь пост целиком.

Вот, к примеру, блокирование элемента li, внутри которого есть ссылка с классом default-block__header-link, которая в свою очередь ссылается на URL со словом megapost:

geektimes.ru#?#li:-abp-has(a.default-block__header-link[href*="megapost"])

Следует помнить, что такие псевдоселектры работают достаточно медленно, так как являются только иммитацией несуществующих в CSS свойств, и немного противоречат тому, как браузеры этот CSS парсят. Здесь подробно описано, почему так происходит. Так что включение таких правил сильно замедляет загрузку страниц.

Для тех же, кто дочитал статью до этого места, дополнительный бонус: рецепт отписки от всех рекламных блогов гиктаймса (правда, делать так не рекомендую: среди блогов попадаются и крайне интересные, например блог того же Яндекса)

geektimes.ru#?#li:-abp-has(a.inline-list__item-link[href*="company"])

Теперь вы можете без труда составить свои фильтры – например, фильтруя статьи по рейтингу, числу просмотров или числу комментариев.

Надеюсь, с новой фичей Adblock борьба за читателей выйдет на новый уровень – теперь компаниям придётся писать качественные посты, а не копировать рекламный обзор со своих сайтов.

 
Источник

Читайте также