AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Webpages vergleichen und Änderungen ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Webpages vergleichen und Änderungen ermitteln

Ein Thema von softtouch · begonnen am 17. Nov 2021 · letzter Beitrag vom 19. Nov 2021
Antwort Antwort
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#1

Webpages vergleichen und Änderungen ermitteln

  Alt 17. Nov 2021, 19:20
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)?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#2

AW: Webpages vergleichen und Änderungen ermitteln

  Alt 17. Nov 2021, 19:39
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.
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#3

AW: Webpages vergleichen und Änderungen ermitteln

  Alt 17. Nov 2021, 19:48
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.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#4

AW: Webpages vergleichen und Änderungen ermitteln

  Alt 17. Nov 2021, 19:54
Vielleicht bekommt das jemand mit RegEx hin, da bin ich gespannt

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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#5

AW: Webpages vergleichen und Änderungen ermitteln

  Alt 17. Nov 2021, 20:40
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:

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.

Geändert von Delphi.Narium (17. Nov 2021 um 20:49 Uhr) Grund: Schreibfehler ...
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#6

AW: Webpages vergleichen und Änderungen ermitteln

  Alt 17. Nov 2021, 20:43
Vielen Dank! Das klingt schon mal vielversprechend. Ich denke, ich werde das erst mal umsetzen und sehen wie es klappt.
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#7

AW: Webpages vergleichen und Änderungen ermitteln

  Alt 19. Nov 2021, 09:08
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?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Webpages vergleichen und Änderungen ermitteln

  Alt 19. Nov 2021, 09:16
.. 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
Klaus

Geändert von Klaus01 (19. Nov 2021 um 09:19 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#9

AW: Webpages vergleichen und Änderungen ermitteln

  Alt 19. Nov 2021, 11:00
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:13 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