Почему Ublock Origin не блокирует элемент с динамическим ID
При ручной блокировке в uBlock Origin пользователи часто сталкиваются с ситуацией, когда выбранный элемент исчезает сразу после применения фильтра, но после перезагрузки страницы снова появляется. Это происходит из-за того, что атрибут id элемента генерируется динамически и меняется при каждом обновлении. В результате фильтр, основанный на старом ID, перестаёт работать.
Как работает динамический ID в рекламных блоках
Современные рекламные сети и скрипты часто используют случайные или хешированные значения для атрибута id (например, m3faa8ffa9da33fcbe1d7de40a0fa8181). Это делается намеренно, чтобы затруднить автоматическое блокирование стандартными фильтрами. При каждой загрузке страницы генерируется новый уникальный идентификатор, и ранее созданное правило перестаёт совпадать.
Как правильно блокировать элементы с изменяющимся ID
Чтобы блокировка работала постоянно, не используйте в правиле динамический id. Вместо этого применяйте другие атрибуты или структуру элемента. Рассмотрим несколько надёжных способов:
1. Блокировка по атрибуту src или href
Если элемент содержит ссылку на рекламное изображение, можно заблокировать его по адресу. В вашем примере в теге <a> есть атрибут href с закодированной ссылкой /help/JTJGcGF5bWVudHMlMkY=/. Создайте правило в uBlock Origin:
example.com##a[href*="/help/JTJGcGF5bWVudHMlMkY=/"]Это правило найдёт все ссылки, содержащие указанный фрагмент пути, и заблокирует их вне зависимости от родительского div.
2. Блокировка по размеру или стилю
Баннеры часто имеют фиксированные размеры. В вашем примере указаны height: 250px и width: 680px. Можно использовать фильтр по стилю:
example.com##div[style*="height: 250px"][style*="width: 680px"]Однако будьте осторожны: если на странице есть другие элементы с такими же размерами, они тоже будут скрыты.
3. Блокировка по вложенной структуре
Если рекламный блок имеет уникальную структуру (например, div > a > img), можно задать правило по вложенности. В uBlock Origin это делается через комбинацию селекторов:
example.com##div > a > img[src*="reklama.jpg"]Такой подход точечно находит элемент по цепочке тегов и значению src.
Использование расширенных возможностей uBlock Origin
Если стандартные CSS-селекторы не помогают, попробуйте процедурные фильтры (procedural filters). Они позволяют применять более сложные условия, например, поиск по тексту ссылки или атрибуту alt. В вашем случае можно использовать фильтр:
example.com##div:has(a[href*="/help/JTJGcGF5bWVudHMlMkY=/"])Этот фильтр найдёт любой div, внутри которого есть ссылка с нужным адресом, и скроет родительский контейнер.
Проверка и тестирование правил
После добавления нового фильтра обязательно перезагрузите страницу и убедитесь, что элемент не появился. Если блокировка не сработала, откройте лог uBlock Origin (значок щита > шестерёнка > вкладка «Мои фильтры») и проверьте, применяется ли ваше правило. При необходимости скорректируйте селектор, используя инструменты разработчика браузера (F12).
Заключение
Динамический id - распространённый приём для обхода блокировщиков рекламы. Чтобы uBlock Origin надёжно скрывал такие элементы, откажитесь от привязки к ID и используйте стабильные атрибуты: ссылки, пути к изображениям, размеры или вложенность тегов. Правильно составленный фильтр будет работать даже после обновления страницы.