ubuntuusers.de

Privoxy, HTML Code filtern

Status: Ungelöst | Ubuntu-Version: Ubuntu 8.10 (Intrepid Ibex)
Antworten |

Tabea

Anmeldungsdatum:
31. März 2007

Beiträge: 659

Hallo zusammen,

ich habe mir erfolgreich den Privoxy eingerichtet.

Nun möchte ich aus bestimmten Internetseiten gewisse Codeabsätze löschen bzw. ersetzen.

Eine meiner gern besuchten Internetseiten hat zum Beispiel folgenden Code den ich löschen möchte.

    if(ad != '45856') {
        var allElements = document.getElementsByTagName('div');
        for (var i = 0; i < allElements.length; i++) {
            if (allElements[i].className == 'a') {
                window.location.href = 'ad.php';
            }
        }
}

Meineswissens muss das in der Datei user.action gemacht werden. Aber wo genau? Und was darf da rein?

Ich hab vorhin einfach mal probiert folgendes zu löschen. s@<div class='a'></div>@@U

Hat auch nicht geklappt.

Was mach ich falsch?

Danke

Grüße

tabea

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Hi,

in /etc/privoxy sollte es zwei Dateien geben: user.filter und user.action.

In user.filter kommen Filter-Regeln. In user.action wird festgelegt, wann welcher Filter angwendet wird. Damit Privoxy auch beide Dateien einließt musst du aber noch sicher stellen, dass sie in der /etc/privoxy/config eingetragen sind. Ich glaube meistens sind die erstmal auskommentiert und du musst sie dann entsprechend einkommentieren.

Ein Filter in user.filter sieht ungefähr so aus:

FILTER: <name> <beschreibung aus mehreren Woertern>

s@suche@ersetze@suffix
s@suche2@ersetze2@suffix2
s@suche3@ersetze3@suffix3
...

Du kannst statt des @s auch andere Trennzeichen verwenden. Nur musst du darauf achten, dass sie nicht im suchen oder ersetzen String vorkommen.

Dann eine Zwischenfrage: Weißt du was Reguläre Ausdrücke sind und wie sie funktionieren? Dein Beispiel s@<div class='a'></div>@@U löscht nämlich _nur_ exakt den String "<div class='a'></div>" und nicht etwa Tags beliebigen Inhalts die mit <div class='a'> eingeleitet und mit </div> beendet werden.

Wenn du deinen Filter erstellt hast, kannst du ihn für "user.action" benutzen. Eine Aktion sieht dabei so aus:

{+filter{name} -filter{name2} ... }
.webseite.de/pfad
.webseite2.com
.webseite3.ru/pfad2
....

Du spezifierst also zuerst welche Filter aktiviert oder deaktiviert werden sollen und dann für welche Webseiten diese angewendet werden sollen, indem du einen Substring der Webseite angibst. Dabei steht "/" für alles.

Das deaktivieren von Filtern macht Sinn, weil die Aktionen von oben nach untern ausgewertet werden. Angenommen du willst ne Art White-Liste machen, also ne Liste von Webseiten in denen ein Script-Tag erlaubt ist. Dann setzt du einen Filter der das Script-Tag für alle Webseiten löscht und wendest ihn auf alle Webseiten an. Dann setzt dur eine Aktion darunter an, die diesen Filter für bestimmte Webseiten deaktiviert.

Für die Konfiguration der user.action steht übrigens noch ein Webfrontend bereit, dass über http://config.privoxy.org/ aufgerufen werden kann. Dort gibt es den Link "view & change the current configuration".

Gruß

Tabea

(Themenstarter)

Anmeldungsdatum:
31. März 2007

Beiträge: 659

Danke,

das mit der user.action hab ich übersehen. Aber jetzt funktionierts.

Ja ich weiß was reguläre Audrücke sind. Ich selbst schaffs aber nicht solche zu definieren. Gibts hierfür irgendwo eine Anleitung für Anfäger?

Es wär schön wenn mir hierfür jemand einen regulären Audruck schreiben könnte (bis ichs selbst kann, dauerts noch): Der Anfang und das Ende des zu entfernenden Strings ist immer gleich. Der Inhalt dazwischen ändert sich. Also:

<anfang>variabel<ende>

Danke schonmal

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Ich kenne mich selbst auch nicht so gut mit regs aus. Um einzelne Tags herauszufilten benutze ich immer folgendes:

s@<anfang(.*\n)*.*/ende>@<!-- Deleted by Privoxy -->@Ug

Das ".*" steht für "Beliebig viele (auch keine) Zeichen beliebigen Types). Leider zählen darunter keine Zeilenumbrüche, weshalb die extra mit "\n" maskiert werden müssen. Wichtig in dem Zusammenhäng wäre noch das "Ug". Das "U" besagt, dass der _kleinste_ Ausdruck gefunden wird, der auf den regulären Ausdruck passt, ansonten würde der größte gewählt. Das "g" besagt, dass so oft wir möglich ersetzt wird; ansonsten würde nur einmal ersetzt werden.

Der Ausdruck ist aber alles andere als perfekt. Folgendes Beispiel:

<anfang>
 <anfang>
 <ende>
<ende>

In diesem Fall würde vom ersten <anfang> bis zu ersten <ende> gelöscht werden und nicht bis zum richtigen schließendem <ende>. Das liegt am Suffix "U", das ja den kleinsten passenden Ausdruck sucht. Lässt man U weg hat man mit folgendem Problem zum kämpfen:

<anfang>
<ende>
Normaler Text
<anfang>
<ende>

Hier würde vom erste <anfang> bis zum letzten <ende> alles gelöscht. Also auch der Normale Text der nicht in diesem Tag steht.

Aber für meine Zwecke (Iframes-, Object- und Javascript-Tags löschen) hat das bisher immer gereicht.

Gruß

Tabea

(Themenstarter)

Anmeldungsdatum:
31. März 2007

Beiträge: 659

Das heist wenn meine Codeschnipsel sehr oft auf einer Seite vorkommen, soll ich einfach das Ug nehmen?

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Wenn es mehr als einmal vorkommt und du jedes Vorkommnis löschen willst musst du "Ug" nehmen. Ich glaube das "U" ist eine Eigenart von Privoxy. Es gibt noch mehr Prixoy typische Suffix, die werden in der user.filer erklärt. Habe ich mir Mangels Bedarf aber nie angesehen. Was ich von Privoxy weiß habe ich übrigens von dieser Seite: http://www.fabiankeil.de/privoxy-anleitung/ . Da finden sich auch einige Beispiele und ihrer Erklärungen. Zu den regulären Ausdrücken fand ich die Perl-Sektion der Selfhtml-Doku sehr gut: http://de.selfhtml.org/perl/sprache/regexpr.htm

Tabea

(Themenstarter)

Anmeldungsdatum:
31. März 2007

Beiträge: 659

funktioniert bei mir nicht.

Ich hab zb. viele folgende Links im Code:

<a href="domain.tld?a=23&b=523&c=informationdieichwill"><tag123>

<a href="domain.tld?a=28&b=965&c=informationdieichwill"><tag123>

<a href="domain.tld?a=57&b=223&c=informationdieichwill"><tag123>

Parameter a und b sind Variabel:

Diese möchte ich kürzen auf: <a href="informationdieichwill">

So wie ich das mit deinem Teil probiert habe funktionierts noch nicht ganz

s@<anfang(.*\n)*.*/ende>@@Ug

s@<domain.tld?a=(.*\n)*.*/"><tag123>>@@Ug

Oder hab ich was falsch gemacht

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Ja, da passt einiges nicht: Das "?" ist im Kontext eines regulären Ausdrucks ein Ausdruck für die Kardinalität. Das müsste glaube ich mit "\?" maskiert werden; außerdem hast du ein doppeltes > am Ende.

Mein Beispiel war darauf ausgerichtet, ganze Tags zu löschen, weil ich dachte, dass es das wäre was du willst.

Ohne Gewähr (wie gesagt, ich weiß auch nur das nötigste über reguläre Ausdrücke) könntest du mal

s@domain\.tld.*=@@g
s@<tag123>@@g

versuchen. Der erste Ausdruck löscht von "domain.tld" bis zum letzten "=" in der gleichen Zeile alles. Der Zweite löscht jedes Vorkommnis von "<tag123>"

Edit: Fehler korrigiert

Antworten |