Skocz do treści

Tworzenie i optymalizowanie filtrów dla Adblock Plusa

Adblock Plus pozwala na blokowanie wyświetlania niechcianych elementów lub całych stron na różne sposoby. Niniejsze opracowanie wyjaśnia możliwości ich wyboru i to jak mogą być stosowane.

  1. Podstawowe zasady tworzenia filtrów
    1. Podstawowe filtry
    2. Tworzenie wyjątków
    3. Dopasowywanie filtra do początków i końców adresów
    4. Znaki separatorów
    5. Komentarze do filtrów
  2. Funkcje zaawansowane
    1. Specyfikacja dostępnych opcji
    2. Stosowanie wzorców wyrażeń regularnych
  3. Reguły ukrywania elementów
    1. Podstawowe zasady
    2. Ograniczanie użycia reguł do konkretnych domen
    3. Selektory atrybutów
    4. Zaawansowane selektory
    5. Uproszczona składnia do ukrywania elementów
  4. Optymalizowanie filtrów
    1. Tłumaczenie wyrażeń regularnych do prostych filtrów
    2. Usuwanie bezużytecznych filtrów

Podstawowe zasady tworzenia filtrów

Metody opisane w tej części są zazwyczaj wystarczające dla większości osób tworzących filtry na własne potrzeby.

Podstawowe filtry

Najprostszym filtrem jaki można zastosować jest wykorzystanie adresu np. banera, który chcemy zablokować. Niestety często elementy adresów są zmieniane losowo lub przez administratorów. Przykładowy adres może wyglądać tak: http://example.com/ads/banner123.gif, gdzie 123 jest elementem, który podlega zmianom. W takim przypadku blokowanie tego konkretnego adresu nic nie da. Trzeba utworzyć bardziej ogólny filtr np. http://example.com/ads/banner*.gif lub nawet http://example.com/ads/*

UWAGA: Należy zwrócić uwagę na to, żeby nie zablokować zbyt wiele przy użyciu symbolu wieloznacznego *. Filtr http://example.com/* zablokuje nie tylko niechciane grafiki, ale wszystkie podstrony witryny example.com.

Tworzenie wyjątków

Czasami zdarza się, że dodany filtr, choć ogólnie działa poprawnie, to blokuje także zawartość, do której chcemy mieć dostęp. Nie trzeba usuwać całego filtru, żeby zobaczyć tę część. W takich sytuacjach stosuje się wyjątki do filtrów. Dla przykładu, filtr adv* zablokuje także adres http://example.com/advice.html. Aby tego uniknąć należy dodać jako wyjątek formułę @@advice.

Tworzenie wyjątków nie różni się od budowy filtrów blokujących. Tu także można stosować symbol wieloznaczny * oraz wyrażenia ogólne. Przed formułą wyjątku umieszcza się @@. Należy pamiętać o tym, że wyrażenie zaczynające się od http:// lub https:// (opcjonalnie z symbolem „fajki” | na początku) spowoduje ustalenie całej witryny jako wyjątku. @@http://example.com - na tej stronie i podstronach nie będą blokowane żadne elementy.

Dopasowywanie filtra do początków i końców adresów

Adblock Plus traktuje każdy filtr tak, jakby przed lub za nim był umieszczony symbol wieloznaczny *. Z tego powodu nie ma różnicy pomiędzy ad a *ad*. Zazwyczaj nie ma to znaczenia, jednak czasami można chcieć, aby zdefiniowany filtr dotyczył tylko określonego początku lub końca adresu.

Na przykład, chcąc zablokować wszystkie elementy Flash, dodanie filtra swf zablokuje adres http://example.com/swf/index.html. Rozwiązaniem tego problemu jest dodanie symbolu "fajki" | na końcu filtra. Znak ten w tym wypadku oznacza, że adres kończy się na poprzedzającym go wyrażeniu. Filtr swf| zablokuje adres http://example.com/flash.swf, a nie zablokuje http://example.com/swf/index.html.

Z kolei filtr |http://baddomain.example/ zablokuje http://baddomain.example/banner.gif, a pozwoli na uruchomienie strony http://gooddomain.example/analyze?http://baddomain.example.

Czasami można chcieć zablokować podobne adresy np.: http://example.com/banner.gif, https://example.com/banner.gif oraz http://www.example.com/banner.gif. Można to osiągnąć poprzez dodanie || przed filtrem, który odnosi się do początku adresu.

||example.com/banner.gif zablokuje wymienione adresy, ale umożliwi otwarcie http://gooddomain.example.com/banner.gif lub http://gooddomain.example/analyze?http://example.com/banner.gif (dotyczy Adblock Plusa 1.1 i późniejszych).

Znaki separatorów

W adresach internetowych występują znaki separatorów. Aby uwzględnić taki znak w filtrze należy do niego dodać ^.

Przykładowo chcemy zablokować adresy http://example.com oraz http://example.com:8000, a umożliwić otwarcie adresu http://example.com.ar. Aby to uzyskać należy stworzyć filtr, w którym znak ^ będzie oznaczał, że w adresie występuje pojedynczy separator – http://example.com^ (dotyczy Adblock Plusa 1.1 i późniejszych).

Separatorem może być litera, cyfra, lub jeden z następujących znaków : -. %. Jako separator może być także uznany koniec adresu. W adresie http://example.com:8000/foo.bar?a=12&b=%D1%82%D0%B5%D1%81%D1%82 wszystkie separatory są zaznaczone na czerwono. Aby zablokować taką stronę należy użyć filtra ^example.com^ lub ^%D1%82%D0%B5%D1%81%D1%82^, lub ^foo.bar^.

Komentarze do filtrów

Jakikolwiek filtr lub tekst poprzedzony znakiem wykrzyknika jest uznawany przez Adblock Plusa jako komentarz. Komentarze są wyświetlane w kolorze szarym. Adblock ignoruje takie linijki, więc można w ten sposób wpisać np. dowolną uwagę do poprzedzającego lub następującego po niej filtra. Sposób ten jest często wykorzystywany do wpisania autorstwa zestawu filtrów.

Funkcje zaawansowane

Opcje opisane w następnej części są używane przez doświadczonych użytkowników oraz twórców list filtrów.

Specyfikacja dostępnych opcji

Adblock Plus pozwala na dodawanie opcji do filtrów w celu zmiany sposobu ich działania. Opcje dopisuje się na końcu filtra po znaku dolara $. Stosując więcej niż jedną opcję oddziela się je przecinkami np. */ads/*$script,match-case .

W podanym przykładzie */ads/* jest zastosowanym filtrem, a script i match-case jego opcjami.

Dostępne są następujące opcje:

  • Opcje typów: ustalają, które typy elementów ma blokować filtr (lub pomijać w blokowaniu w przypadku wyjątków). Wielokrotny wybór typów opcji ustala filtrowanie kilku typów elementów. Dopuszczalne typy:
    • script – zewnętrzne skrypty uruchamiane znacznikami HTML;
    • image – obrazki ładowane poprzez znacznik „img” w HTML;
    • background – obrazy tła, często zdefiniowane poprzez CSS;
    • stylesheet – zewnętrzne pliki stylów CSS;
    • object – treści dostarczane przez wtyczki przeglądarki np. Flash, czy Java;
    • xbl – wiązania XBL (dołączane poprzez -moz-binding CSS) - dotyczy Firefoksa od wersji 3;
    • ping – odnośniki z atrybutem ping - dotyczy Firefoksa od wersji 3;
    • xmlhttprequest – polecenia wywołane przez obiekty XMLHttpRequest - dotyczy Firefoksa od wersji 3;
    • object-subrequest – polecenia wywołane przez wtyczki np. Flash - dotyczy Firefoksa od wersji 3;
    • dtd – pliki specyfikacji DTD ładowane przez dokumenty XML - dotyczy Firefoksa od wersji 3;
    • subdocument – osadzone strony, zazwyczaj zawarte w ramkach HTML;
    • document - strona jako taka (the page itself) (do strony mogą być dodane wyłącznie reguły wyjątków);
    • other' – typy poleceń nie wymienione wcześniej (dla Firefoksa 2 zawiera także wiązania XBL oraz XMLHttpRequest).
  • Opcja odwrotna typów: określa, których typów Adblock ma nie blokować. Możliwe opcje to: ~script, ~image, ~background, ~stylesheet, ~object, ~xbl, ~ping, ~xmlhttprequest, ~object-subrequest, ~dtd, ~subdocument, ~document, ~other.
  • Ograniczenia dla poleceń obcych i własnych (third-party).

Jeśli dodana jest opcja third-party filtr jest aktywny dla poleceń ze źródeł innych niż aktualnie przeglądana strona. Odwrotna opcja ~third-party ogranicza polecenia jedynie do tych ze źródła aktualnie przeglądanej strony.

  • Ograniczenia dla domen. Opcja domain=example.com oznacza, że filtr powinien być stosowany wyłącznie w domenie example.com. Podanych może być więcej domen, ale należy rozdzielić je „fajką” np. domain=example.com|example.net. Znak tyldy ~ przed domeną wyłącza ją z użycia w niej filtra. domain=~example.com oznacza, że filtr powinien być stosowany na wszystkich stronach za wyjątkiem example.com. Z kolei domain=example.com|~foo.example.com wyłącza z działania filtra subdomenę foo.example.com.
  • match-case – dodaje opcję rozróżniania wielkości liter. Filtr */BannerAd.gif$match-case zablokuje adres http://example.com/BannerAd.gif a nie zablokuje http://example.com/bannerad.gif
  • collapse – ta opcja ustawia ukrywanie elementów. Odwrotność opcji ~collapse sprawia, że elementy nie są nigdy ukrywane. Opcje te mają pierwszeństwo przed ogólnym ustawieniem „Ukrywaj zablokowane elementy”.

Stosowanie wzorców wyrażeń regularnych

Jeśli potrzebna jest jeszcze większa kontrola nad działaniem filtrów do pomocy przychodzą wzorce wyrażeń regularnych. Na przykład filtr /banner\d+/ będzie blokował strony z wyrażeniem banner123, banner321, a nie będzie blokował banners.

Więcej na temat wzorców wyrażeń regularnych można znaleźć w zasobach Mozilla Developer Center.

Do testowania poprawności wyrażeń regularnych można użyć rozszerzenia Regular Expressions Tester.

UWAGA: Wyrażenia regularne nie powinny być stosowane jako sposób na przyspieszanie działania filtrowania. Od wersji 0.7 Adblocka filtry podstawowe (np. http://example.com/banner*.gif) są wykonywane szybciej.

Reguły ukrywania elementów

Podstawowe zasady

Czasami można spotkać się z reklamami, których nie można zablokować, gdyż są osadzone jako tekst w stronie jako takiej i są ładowane podczas jej wczytywania. Wszystko, co można zrobić to ją ukryć, jeśli nie chce się jej oglądać. To jest właśnie to, przez co rozumie się ukrywanie elementów.

Gdy spojrzy się na kod źródłowy strony można odnaleźć mniej więcej coś takiego:

<div class=”textad”>
Najlepsza pizza w mieście!
<div>

Reklama przedstawiona w ramce powyżej jest zawarta wewnątrz elementu div z atrybutem klasy „textad”. Tę reklamę ukryje następująca kombinacja: ##div.textad

Znaczniki ## oznaczają regułę ukrywania, podczas gdy reszta jest selektorem identyfikującym elementy do ukrycia.

<div id=”sponsorad”>

Takiej pizzy jeszcze nie jadłeś! Kliknij tu!
<div>

W podobny sposób można ukryć elementy poprzez ich atrybut id. Reguła ukrywająca tę reklamę wygląda następująco: ##div#sponsorad. W tym przypadku nie trzeba określać nazwy. elementu. Reguła ##*#sponsorad będzie równie skuteczna.

<textad>
Tylko u nas największa i najsmaczniejsza pizza!

</textad>

W tej sytuacji, aby ukryć reklamę należy zastosować ukrywanie nazwy elementu ##textad

Rozszerzenie Element Hiding Helper pomaga w wyborze elementów do ukrycia i zapisaniu odpowiedniej reguły bez przeglądania kodu źródłowego strony. Tak, czy inaczej podstawowa wiedza na temat języka HTML jest użyteczna.

UWAGA: Element Hiding Helper funkcjonuje w odmienny sposób niż tworzenie ogólnych filtrów własnoręcznie. Filtry uzyskane przy pomocy tego rozszerzenia blokują jeden, konkretny element, dlatego nigdy nie ma w nich symboli wieloznacznych.

Ograniczanie użycia reguł do konkretnych domen

Często potrzeba ukryć konkretną reklamę lub treść w jednej domenie bez potrzeby ustanawiania reguły dla innych stron. Przykładowo reguła ##*.sponsor mogłaby ukryć treść pożądaną na innych stronach. Jeśli regułę zapisze się jako example.com##*.sponsor będzie ona dotyczyła stron http://example.com i np. something.example.com, ale nie zablokuje treści na http://example.org. Reguła może dotyczyć więcej niż jednej domeny. W takim wypadku należy je wypisać po kolei, oddzielając przecinkami: domena1.example,domena2.example,domena3.example##*.sponsor

Tylda poprzedzająca nazwę domeny wyłącza ją spod ogólnej reguły np. ~example.com##*.sponsor będzie dotyczyło wszystkich domen poza example.com.

Z kolei example.com|~foo.example.com##*.sponsor tworzy regułę dla domeny example.com wyłączając z niej subdomenę foo.example.com

UWAGA: Ukrywanie elementów możliwe jest wyłącznie w przypadku zastosowania pełnych nazw domen. Dzieje się tak wskutek sposobu w jaki zaimplementowane jest ukrywanie elementów. Nie można użyć jakiejkolwiek innej części adresu oraz np. samego „domena” w zastępstwie domena.example, domena.test

UWAGA: Reguły ukrywania elementów mogą zostać użyte również do ukrywania elementów interfejsu użytkownika. Dla przykładu reguła browser##menuitem#javascriptConsole ukryje wpis konsoli błędów w menu Narzędzi Firefoksa.

Selektory atrybutów

Niektóre z tekstowych reklam nie mają nadanego ani id, ani atrybutu klasy. W takim przypadku do ich ukrycia można użyć innych atrybutów np. ##table[width=”80%”] ukryje tabele z atrybutem szerokości ustawionym na 80%. Jeśli nie chce się określać wszystkich wartości atrybutu formuła ##div[title^=”adv”] [title$=”ert”] ukryje wszystkie elementy div z atrybutem tytułu adv i jednocześnie kończące się na ert. table[width=”80%”] [bgcolor=”white”] dotyczyć będzie tabel o białym tle z atrybutem szerokości „80%”.

Zaawansowane selektory

W zasadzie jakikolwiek selektor CSS obsługiwany przez Firefoksa może zostać użyty do ukrywania elementów. Dla przykładu formuła ##div.adheader + * ukryje cokolwiek występujące po elemencie „div” z nadaną klasą „adheader”. Pełną listę elementów stylów CSS można znaleźć na stronie W3C. Należy zwrócić uwagę na to, że nie wszystkie z selektorów są obsługiwane przez Firefoksa.

UWAGA: Przedstawiony sposób ukrywania przeznaczony jest dla zaawansowanych użytkowników. Aby korzystać z tego sposobu należy być dobrze zaznajomionym z dostępnymi selektorami CSS. Adblock Plus nie weryfikuje składni dodawanych selektorów. Użycie błędnej składni CSS może zakłócić działanie innych, poprawnie skonstruowanych reguł. Do sprawdzenia błędów CSS zaleca się użycie konsoli błędów JavaScript.

Uproszczona składnia do ukrywania elementów

Dla zachowania kompatybilności wstecznej Adblock Plus, co prawda obsługuje uproszczoną składnię (np. #div(id=foo)) do ukrywania elementów, ale nie zaleca się jej stosowania. Wsparcie dla tego rodzaju składni może nie być dłużej kontynuowane. Preferuje się używanie selektorów CSS.

Optymalizowanie filtrów

Tłumaczenie wyrażeń regularnych do prostych filtrów

W wersji 0.7 i nowszych Adblock Plusa porównywanie prostych filtrów (nie regularnych wyrażeń) zostało zoptymalizowane tak, że nawet bardzo duża liczba filtrów nie spowalnia wyświetlania stron internetowych. Niestety ulepszenie nie działają z filtrami opartymi o wyrażenia regularne, dlatego każdy taki filtr spowalnia wyświetlanie stron internetowych. Wyrażenia regularne są stosowane od bardzo długiego czasu do „kompresowania” list filtrów, skutkując długimi i nieczytelnymi filtrami - co nie jest już potrzebne.

Użytkownicy mogą skorzystać z narzędzia do konwertowania wyrażeń regularnych do prostych filtrów, w celu tworzenia szybko działających list filtrujących. Na przykład, narzędzie skonwertuje filtr z wyrażeniem regularnym /ad|banner/ na dwa proste filtry ad i banner. Pozostawi bez zmian wyrażenia takie jak /ads|ad\d+/ dlatego, że wyrażenie \d nie ma pokrycia w prostych filtrach, a konwerter nie posiada jeszcze ich obsługi.

Przejedź do ustawień rozszerzenia Adblock Plus i zaznacz wszystkie filtry, jakie chcesz sprawdzić i skonwertować. Skopiuj je (wybierając menu Edycja > Kopiuj lub wciskając klawisze Ctrl+C) a następnie wklej do poniższego pola tekstowego.

UWAGA: Żadne dane nie są przesyłane do internetu. Wszystkie wymagane obliczenia są przeprowadzane na komputerze użytkownika, a wprowadzone dane nigdy nie opuszczają przeglądarki.



Twoja lista filtrów opartych o wyrażenia regularne została skonwertowana. Możesz ją skopiować i wkleić w ustawieniach rozszerzenia Adblock Plus (usuwając wcześniej niezoptymalizowane filtry). Alternatywnie, możesz też wyświetlić filtry w nowej karcie, zapisać je jako plik, a następnie zaimportować w Adblock Plusie. Zaleca się także sprawdzenie beżużytecznych filtrów.

Usuwanie bezużytecznych filtrów

Narzędzie do usuwania bezużytecznych filtrów wykrywa i usuwa zbędne filtry, takie jak http://example.com/ads/* i */ads/*, gdzie pierwszy powiela drugi. Generując nową listę filtrów skróconą o zdublowane i bezużyteczne filtry.

To narzędzie ma pewne ograniczenia. Nie potrafi operować na regułach utworzonych za pomocą rozszerzenia Element Hiding Helper i zawsze pozostawia je niezmienione. Nie sprawdza też zaawansowanych filtrów opartych na wyrażenia regularnych.

Przejedź do ustawień rozszerzenia Adblock Plus i zaznacz wszystkie filtry, jakie chcesz sprawdzić i skonwertować. Skopiuj je (wybierając menu Edycja > Kopiuj lub wciskając klawisze Ctrl+C) a następnie wklej do poniższego pola tekstowego. Alternatywnie, możesz wyeksportować listę filtrów do pliku tekstowego i wkleić jego zawartość do poniższego pola tekstowego.

UWAGA: Żadne dane nie są przesyłane do internetu. Wszystkie wymagane obliczenia są przeprowadzane na komputerze użytkownika, a wprowadzone dane nigdy nie opuszczają przeglądarki.


Status:

    Wygenerowano listę filtrów pozbawioną bezużytecznych filtrów. Możesz ją skopiować i wkleić w ustawieniach rozszerzenia Adblock Plus (usuwając wcześniej niezoptymalizowane filtry). Alternatywnie, możesz też wyświetlić filtry w nowej karcie, zapisać je jako plik, a następnie zaimportować w Adblock Plusie.

    Tłumaczenie na podstawie: http://adblockplus.org/en/filters, http://adblockplus.org/en/deregifier oraz http://adblockplus.org/en/redundancy_check.

    Przedruk z niewielkimi modyfikacjami z Mozillapl.org Wiki: Tworzenie filtrów dla rozszerzenia Adblock Plus na tych samych zasadach, ma na celu popularyzację polskiej bazy wiedzy na temat Firefoksa i innych programów Mozilli.

    Dołącz do toczącej się dyskusji!

    Możesz śledzić komentarze czytelników przez RSS , napisać, co o tym wszystkim sądzisz lub zostawić ślad prowadzący do Twojej strony.

    1. A jakie są odpowiedniki filtrów pod Adblock'a dla Chrome?

      favicon

      look997

      27 Lip 2010 15:31:02

    2. look997: Są trzy analogiczne rozszerzenia, zerknij do niedawnego wpisu o przydatnych rozszerzeniach dla Google Chrome (tam podlinkowałem moim zdaniem najlepsze).

      Grzegorz

      27 Lip 2010 15:53:37

    3. Przydałoby się stworzyć program, który w jakiś sposób, skompaktowałby wiele subskrypcji w jedną. Czas odpalania FF bez subskrypcji a z listą kilku, znacznie się potrafi wydłużyć

      favicon

      Mystenes

      27 Lip 2010 23:45:40

    4. Mystenes: Ogranicz liczbę subskrypcji lub wyłącz ich aktualizacje. Na stronie Adblock Plusa jest też narzędzie do optymalizacji i usuwania dublujących się filtrów.

      Przetłumaczyłem instrukcje z powyższych linków, dodałem też narzędzia (całość dodam jeszcze na Mozillapl.org Wiki). Zachęcam do skorzystania.

      Grzegorz

      28 Lip 2010 07:15:47

    5. wyłączenie subskrypcji to bezsens. wycinam reklamy nie tylko z polski, ale z innych krajów również.

      favicon

      Mystenes

      28 Lip 2010 23:04:53

    6. Mystenes: Pisałem o ograniczeniu ich liczby (większość i tak powiela się nawzajem), poza tym wydłuża zamykanie przeglądarki (automatyczne kopie subskrypcji i własnych filtrów).

      Nie ilość, a zawarte filtry, mają znaczenie dla wycinania reklam (niezależnie od kraju pochodzenia).

      Grzegorz

      29 Lip 2010 08:46:49

    7. (Komentarz zmodyfikowany 30.07.2010 o 08:41)

      Dlatego chciałbym program, który z kilku subskrypcji, skleiłby mi jedną, zoptymalizowaną, a nie 4 czy 5 subskrypcji lub ręczne lepienie takiej listy.

      favicon

      Mystenes

      29 Lip 2010 23:43:00

    8. (Komentarz zmodyfikowany 01.10.2010 o 08:36)

      Moim skromnym zdaniem mAdBlock jest lepszy -- nie trzeba się bawić w regułki i nie zawiesza tak Firefoksa.
      Polecam

      favicon

      Edzoro

      30 Wrz 2010 13:04:48

    9. Edzoro: mAdBlock może być równie skuteczny, ale nie równie bezpieczny, co Adblock Plus. Nie ma żadnej licencji ani polityki prywatności, nie wiesz, czy loguje odwiedzane adresy itp. Z tego typu narzędzi zdecydowanie wolę Privoxy, które nie dość że robi to samo - to ma źródła dostępne na licencji GPLv2 i jasną politykę prywatności (nie zbiera ani nie przesyła nikomu żadnych danych dotyczących przeglądania sieci przez użytkowników).

      Nigdy nie spotkałem się też z sytuacją, aby Adblock Plus zawieszał Firefoksa. Ta informacja jest nieprawdziwa.

      Grzegorz

      1 Paź 2010 08:35:57

    Dodaj komentarz

    Markdown (szczegółowy opis znaczników):
    *em* | 1. lista 2. numerowana | * lista wypunktowana | _strong_ | [link](http://) | <http://> | > cytat.