- PVSM.RU - https://www.pvsm.ru -
Многие на Хабре спрашивают [1], как отфильтровать посты отдельных авторов и корпоративных блогов. Совсем недавно эта возможность появилась – правда, для этого необходима последняя версия блокировщика 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
Если при этом все картинки на сайте исчезнут, новые возможности включены. Если ничего не изменится – значит, надо обновляться.
Как работают псевдоселекторы, подробно описано здесь [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/
Нажмите здесь для печати.