Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Webpages vergleichen und Änderungen ermitteln (https://www.delphipraxis.net/209285-webpages-vergleichen-und-aenderungen-ermitteln.html)

softtouch 17. Nov 2021 18:20

Webpages vergleichen und Änderungen ermitteln
 
Ich habe folgendes Problem: Ich muss 2 Webseiten vergleichen, und Änderungen erkennen. Dabei darf jedoch nur der sichtbare Text einer Webseite verglichen werden, keine html Tags, also nur der Text, den auch der Browser darstellt.
So in etwa wie beim Notepad++ die Compare Funktion (Plugin menu).
Kennt jemand vielleicht eine Komponente oder ein code snippet, welches solche Änderungen erkennen kann, sowas wie TDiff oder ähnliches (TDiff funktioniert nicht so wie ich es brauche)?

Delphi.Narium 17. Nov 2021 18:39

AW: Webpages vergleichen und Änderungen ermitteln
 
Mal ein unüblicher Vorschlag:

Selbermachen:

Das Folgende nur für den Teil zwischen den Body-Tags.

1. Vor jede < einen Zeilenumbruch.
2. Hinter jede > einen Zeilenumbruch.
3. alle übrigen Zeilenumbrüche durch ein Leerzeichen ersetzen.
Ergebnis: Tags und Text befinden sich in getrennten Zeilen.
4. Alle Zeilen, die mit < beginnen, entfernen.
5. Alle Textzeilen per Trim von führenden und folgenden Whitespace bereinigen.

Das Ergebnis sollte dann recht einfach per Diff-Tool, TDiff oder ähnlichem, vergleichbar sein.

Voraussetzung:

Halbwegs ordentlich strukturiertes HTML, das nicht mit Javascripten vollgespickt ist.

Sonst müsste man vorher alle Script-Tags suchen und diese (mit dem gesamten Inhalt dazwischen) entfernen, was aber nach dem Einfügen von Zeilenumbrüchen vor < und hinter > recht einfach zu realsieren ist.

softtouch 17. Nov 2021 18:48

AW: Webpages vergleichen und Änderungen ermitteln
 
Danke, aber dann weiss ich nicht mehr, wo der text im original html Dokument war und kann diesen dann nicht farblich hinterlegt darstellen.

Eine Website wird geladen im Browser, und falls diese schon mal geladen wurde, und lokal gespeichert ist, muss der Inhalt mit der gespeicherten Kopie verglichen werden, und alle Änderungen zur vorherigen Version werden farblich hinterlegt. Die Website ist also im Browser geladen, und nur die geänderten Texte sollen dort dann zum Beispiel Gelb hinterlegt werden.

Ich habe nach 2 Tagen Suche einfach keine Idee mehr, wie das gehen soll.

Rollo62 17. Nov 2021 18:54

AW: Webpages vergleichen und Änderungen ermitteln
 
Vielleicht bekommt das jemand mit RegEx hin, da bin ich gespannt :stupid:

Es gibt verschiedene TextDiff Comparer, die wohl auf einer uralte Version von Angus Johnson basieren.
Vielleicht hilft Dir das auch weiter,
aber das war nicht für HTML gedacht.
Das muss man vielleicht vorher selber ausfiltern.

Delphi.Narium 17. Nov 2021 19:40

AW: Webpages vergleichen und Änderungen ermitteln
 
HTML ist ein formatfreier Text.

Das trennen von Tags und Text per Zeilenbrüchen ändert da schonmal nix. Auch das entfernen der Zeilenumbrüche im Text und deren Ersetzung durch Leerzeichen nicht, da die Zeilenumbrüche vom Browser sowieso ignoriert werden.

Dann werden die Tag-Zeilen eben nicht entfernt, sondern nur die Zeilen zwischen den Tags verglichen. Das sollte mit zwei Stringlisten zu realisieren sein.

Die dann zeilenweise durchgehen, Tagzeilen ignorieren, Textzeilen vergleichen. Sind sie gleich, ok, ansonsten halt weiter prüfen.

Dazu nimmt man dann zwei weitere Stringlisten, die jeweils den Inhalt einer Zeile aufnehmen und zwar als DelimitedText. Dann hat man zwei Listen, mit jeweils einem Wort in einer Zeile. Die kann man dann wiederum zeilenweise vergleichen. Gibt's da 'nen Unterschied, sucht man sich das entsprechend Wort in der ursprünglichen Textzeile und ersetzt es z. B. so in der Art:

Delphi-Quellcode:
TextZeile := AnsiReplaceText(Textzeile,'WortDasAndersIst','<span style="color:yellow">' + 'WortDasAndersIst' + '</span>');


Das sieht erstmal irgendwie ein bisserl unübersichtlich aus, dürfte aber recht einfach zu realisieren sein.
Und gibt es mehrere unterschiedliche Wörter in einer Zeile hintereinander, dann wird halt jedes Wort davon farblich hervorgehoben, ja und? Hat der Browser eben ein bisserl mehr Arbeit, aber man spart sich den Aufwand, irgendwelche Textbereiche von "Beginn der Änderung" bis "Ende der Änderung" zu suchen. Das würde dann eher sportlich ;-)

Oder noch "brutaler".

Wie gesagt: Der Text ist formatfrei:

Daraus können wir schließen, dass auch jedes einzelne Wort in einer Zeile stehen darf.

Tags, wie gehabt in eigene Zeile "pappen".

In Textzeilen wird grundsätzlich jedes Leerzeichen durch einen Zeilenumbruch ersetzt.

Dann reichen zwei Stringlisten, die zeilenweise verglichen werden können. Unterschiedliche Zeilen werden mit Span-Tags (o. ä.) zur Farbhervorhebung ergänzt. Hier könnten dann aber auch bekannte DIFF-Tools helfen. Wenn nicht, muss man eben bei eingefügten oder entfernten Wörtern die Stringlisten selbst synchronisieren.

softtouch 17. Nov 2021 19:43

AW: Webpages vergleichen und Änderungen ermitteln
 
Vielen Dank! Das klingt schon mal vielversprechend. Ich denke, ich werde das erst mal umsetzen und sehen wie es klappt.

softtouch 19. Nov 2021 08:08

AW: Webpages vergleichen und Änderungen ermitteln
 
Nichts klappt :(
Wenn eine Seite zum Beispiel

<br>Test<br>
<br>Test1<br>
<br>Test2<br>
<br>Test3<br>
<br>Test4<br>

hat, und ich zum Beispiel die 2, Zeile (mit test1) entferne, verschieben sich ja alle folgenden Zeilen nach oben, und stimmen mit der ursprünglichen Seite ja nicht mehr überein und der gesamte nachfolgende Text würde als geändert gefunden, was aber falsch wäre.

Sieht so aus, als würde das ein größeres Problem werden. Das so etwas geht, kann man an dem alten UpdatePatrol tool sehen, aber wie zur Hölle habe die das gemacht?

Klaus01 19. Nov 2021 08:16

AW: Webpages vergleichen und Änderungen ermitteln
 
.. wäre es eine Möglichkeit den HTML-Code nach Text (html2Text) zu konvertieren
und diesen dann zu vergleichen.
Im Text wären dann nur die Inhalte zu sehen.
Hier ist dazu eine Diskussion mit Lösungsansätzen zu finden: http://www.delphigroups.info/2/3/209810.html

Grüße
Klaus

Delphi.Narium 19. Nov 2021 10:00

AW: Webpages vergleichen und Änderungen ermitteln
 
Zuerst musst Du die Tags vom Text trennen (s. o.), sonst wirst Du scheitern.

Du darfst natürlich nicht stur zeilenweise vergleichen, sondern musst dann, wenn Du etwas aus der alten Datei in der neuen Datei nicht an der gleichen Position findest, für diese Zeile prüfen, ob Du sie irgendwo "hinter" der fehlenden Zeile findest. Und natürlich auch umgekehrt.

Du musst letztlich für jede Zeile prüfen, ob sie eventuell in der anderen Datei an einer späteren Position zu finden ist. Ist dem so, musst Du in der Datei, in der sie fehlt, solange Leerzeilen einfügen, bis Du wieder eine zeilenweise Übereinstimmung zwischen beiden Dateien erhalten hast.

Und nein, das ist nicht trivial.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz