- PVSM.RU - https://www.pvsm.ru -

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

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

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

Для тех, кому не хочется читать дальше, просто приведу код фильтра 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 Если при этом все картинки на сайте исчезнут, новые возможности включены. Если ничего не изменится – значит, надо обновляться.

Как работают псевдоселекторы, подробно описано здесь [2] в секции «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 парсят. Здесь [3] подробно описано, почему так происходит. Так что включение таких правил сильно замедляет загрузку страниц.

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

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

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

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

Автор: Кейв

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/brauzery/268438

Ссылки в тексте:

[1] спрашивают: https://habrahabr.ru/company/tm/blog/340934/#comment_10490818

[2] здесь: https://adblockplus.org/filter-cheatsheet#options

[3] Здесь: https://web-standards.ru/articles/parent-selector/

[4] Источник: https://geektimes.ru/post/295487/