Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi HTML auslesen (https://www.delphipraxis.net/209836-html-auslesen.html)

Delbor 28. Jan 2022 14:38

Delphi-Version: 10.4 Sydney

HTML auslesen
 
Hi zusammen

Meinem derzeitigen Testprogramm hab ich einen Edgebrowser verpasst und bin jetzt auch auf die (blöde?) Idee gekommen, ich könnte damit statt mit dem Firefox surfen, also hab ich mir mal die Lesezeichen des Fuchses nach HTML exportiert - JSON wäre auch möglich.
Zuallererst lade ich von der Datei mit den Bookmarksicherungen den HTML-Code in einen Stringstream. Dann hab ich mal ein Beispiel zu POS und PosEx nachgebaut und etwas abgeändert.

Delphi-Quellcode:
function THomeOfficerFeMain.LoadLinkStream: String;
  var StartPos, EndPos, Pos1, Pos2, Offset, L_Lenght :Integer; S, HText: String;
begin
  inherited;
  Self.FLinkStream := TStringStream.Create;
  FLinkStream.Position := 0;
  FLinkStream.LoadFromFile(HomeOfficerFeMain.ProjectPath +'\HTML\Lesezeichen-HTML\Lesezeichen-bookmarks 2.html');
  s := FLinkStream.DataString;
  L_Lenght := Length(S);
  ShowMessage('HTMLTextlänge := ' + IntToStr(L_Lenght));
  StartPos := Pos('"', s);
  if StartPos <> 0 then // erstes Vorkommen gefunden
  begin
    // Position des zweiten Semikolons ermitteln: Suchstart gleich nach dem ersten Vorkommen
    ShowMessage('Positionswert von StartPos := ' + IntToStr(StartPos));
    EndPos := PosEx('"', s, StartPos + 1);
    if EndPos <> 0 then
      ShowMessage('gefunden an Position:(EndPos) ' + IntToStr(EndPos))
// Hier habe ich die letzten CodeZeilen gelöscht--sie sind irrelevant hier
    end;
end;
Der durchsuchte Text enthält in doppelten Hochkommas die URL einer Webseite und in eckigen Klammern den sichtbaren Text - die HTML-Seite, so im Feuerfuchs geladen, ist eigentlich voll funktionsfähig. Allerdings mit der Einschränkung, dass sich (ohne Javascript?) die Webseite in der selben Seite öffnet.

Um weiter zu suchen, müssten die Positions- und Suchwerte angepasst werden, bis das Ende des Strings erreicht ist.

Andrerseits sind doch Streams recht gute Werkzeuge und sollten eigentlich mit Bordmitteln die komplette Suche durchführen können?

Gruss
Delbor

Redeemer 28. Jan 2022 14:57

AW: HTML auslesen
 
Vielleicht solltest du schreiben, was du eigentlich möchtest? Oder wolltest du nur wissen, dass es das HTML-Tag
Delphi-Quellcode:
<base>
gibt?

Der schöne Günther 28. Jan 2022 16:00

AW: HTML auslesen
 
Ich habe die konkrete Frage ehrlich gesagt auch nicht verstanden.

TiGü 28. Jan 2022 16:11

AW: HTML auslesen
 
HTML ist doch auch nur eine Art XML.
Da würde ich die bestehenden Werkzeuge in Delphi dafür verwenden und das in ein XMLDocument laden und mich durch die Nodes wuseln bis zum gewünschten Element.

himitsu 28. Jan 2022 16:28

AW: HTML auslesen
 
Nein, es sieht gleich ähnlich aus, aber es gehört garnicht zusammen.

XHTML wäre HTML, welches vollständig kompatibel zu XML ist.



In HTML sind offene Elemente erlaubt
und ein "guter" HTML-Parser kann auch Konflikte/Defekte/Fehler/usw. in der Syntax auflösen/ignorieren.



HTML stammt von SGML ab (ist ein verweichlichter Nachfahre ... da WebEntwickler faule fehleranfällige Idioten sind, wurden Browser verunstaltet und erlauben viel Scheiße)
und XML ebenfalls.
Sie sind quasi inkompatible Geschwister unterschiedlicher Väter (oder Mütter).
Mit XHTML wurden sie dann wieder vereint, bzw. HTML an die zwanghaft strikte Syntax von XML angepasst.

HTML kann XML verstehen,
aber XML kann HTML nur verstehen, wenn es strict valides (well-formed) XHTML ist.
SVG dageben baut auf XML auf und somit kann XML auch SVG lesen. (und SVG kann auch direkt in HTML rein, da SVG>XML>HTML sich in dieser Richtung verstehen)

Delbor 28. Jan 2022 16:46

AW: HTML auslesen
 
Hi zusammen

Was ich wirklich will? Na ja, ich wusste erstmal nicht, wie ich das Formulieren sollte Tatsache ist: Im Laufe der Zeit haben sich sehr blödsinnig viele Lesezeichen angesamelt, die ich nie lösche, weil man sie gerade dann mal bräuchte...

Im Firefox kann man zwar Lesezeichen mit verschiedenen Kommentaren versehen (Schlagwörter, Schlüsselwörter), nicht aber Ordner. Beim Neuordnen derselben ist es mir wiederholt passiert, dass ich so ein Ding 'verloren' habe - es ist mir gewissermasse von der Gabel ...ähh Maus gerutscht und in irgendeinem Ordner verschwunden. Wenn ich dann nicht wirklich mitgekriegt habe, in welchem, konnten Stunden oder auch Tage vergehen, bis ich den wieder fand.
Was also liegt da näher, als dem mit meinen Programmierkenntnissen abhilfe zu verschaffen? So habe ich also meine Lesezeichen im Firefox in eine HTML-Datei exportiert und müsste sie in meinem Programm importieren. Allerdings soll der String (und genau das ist es eigentlich) noch weiter bearbeitet werden, indem die einzelne Einträge auf mehrere Treeviews verteilt werden. Ausserdem soll jeder Knoten in einem Record (in Nodes.Data) speichern, ob er einen Knoten oder eine Datei/URL repräsentiert etc.

Ich hoffe, ich habe mein Ziel einigermassen verständlich machen können.
Ach ja: als 'Lesezeichenbox' will ich ein hundsnormales Treeview verwenden, bzw. eben auch mehrere. Da gäbe es denn eines für Links im Zusammenhang
  • mit Delphi
  • mit Rezepten
  • mit Microsoft
  • mit PiPaPo und so weiter
Ziel: die Wahnsinnsliste, wie sie hute existiert, eliminieren und links wiederfinden...

Gruss
Delbor

Delphi.Narium 28. Jan 2022 18:21

AW: HTML auslesen
 
Warum via HTML und parsen?

FireFox (zumindest meine schon etwas ältere Version) speichert diese Infos in der places.sqlite, das ist eine SQLite-Datenbank.

Die Lesezeichen stehen dort in der Tabelle moz_bookmarks, da kann man mit Datenbankmitteln (via Delphi) ran.

Zu finden ist sie im Profilordnerverzeichnis "irgendwo in den Benutzereinstellungen von Windows".

%APPDATA%\Mozilla\FireFox\Profiles\irgendwas kryptisches\places.sqlite

Habe aber keine Ahnung, wie die Tabellen in der Datenbank miteinander in Verbindung stehen.

Aber um sich die Daten erstmal anzusehen, sollte das reichen.

mmw 28. Jan 2022 18:37

AW: HTML auslesen
 
Hallo,

DB - Info

https://www.wenjiangs.com/wiki/en-US...laces/Database

Gruß

Delbor 28. Jan 2022 22:55

AW: HTML auslesen
 
Hi zusammen

@Delphi.Narium: Vielen Dank für deinen Tip bezüglich der DB places.sqlite. Ich habe davon gleich mehrere gefunden:
C:\Users\Roger\AppData\Roaming\Mozilla\Firefox\Pro files\mk6nshpf.default-1476204960173-1550907348311\places.sqlite.
So, wie's ausschaut, gibts davon eine ganze Menge.

@mmw: Hochinteressant!

Euch beiden vielenDank!

Gruss
Delbor

Delphi.Narium 29. Jan 2022 09:48

AW: HTML auslesen
 
Es müsste je User am Rechner eine geben.

Im Zweifel starte FireFox, gebe irgendeine (bisher nicht genutzte?) Url ein und rufe die Seite auf. Beende FireFox, suche nach der places.sqlite mit dem neuesten Datum.

Das müsste dann die sein, die für Dich persönlich von FireFox genutzt wird. Die eingegebene Url müsste sich dann in der Tabelle Places, bei Sortierung nach id oder last_visit_date, am Ende finden lassen.

Ja, der Weg ist nicht professionell, sollte aber ausreichen ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr.
Seite 1 von 2  1 2      

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