Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Picture im Webbrowser downloaden (https://www.delphipraxis.net/191957-picture-im-webbrowser-downloaden.html)

juelin 7. Mär 2017 14:34

Picture im Webbrowser downloaden
 
Hallo zusammen,
ich habe ein Problem. Benutze Delphi XE5.
Ich rufe im Webbrowser eine Seite auf (https://www.lidl.de/de/billiger) und lese den HTML-Code aus.
Dabei werden auch Bilder angezeigt und im HTML-Code steht auch der Filename:

<img data-original="/media/product/0/0/1/9/7/5/6/rotkaeppchen-sekt-trocken-regular--5.jpg" alt="Rotkäppchen Sekt, trocken" class="lazy" /><span class="special">

Wie kann ich nun das Bild downloaden?

Gerne auch ein Beispiel senden.

Danke für die Hilfe.

Gruß Jürgen

mjustin 7. Mär 2017 14:56

AW: Picture im Webbrowser downloaden
 
Die Bildresource hat die volle URL https://www.lidl.de/media/product/0/...regular--5.jpg

Zum Downloaden verwendet man einen HTTP Client, z.B. die Klasse TIdHTTP aus Indy.

Deren Get Methode liefert die Resource dann, z.B. wie hier beschrieben:

http://stackoverflow.com/questions/1...-url-in-delphi

P.S. um zu testen ob das Get funktioniert, kann man die vie Get erhaltendenen Daten über einen Filestream als lokale Datei speichern, und diese dann öffnen.

himitsu 7. Mär 2017 15:22

AW: Picture im Webbrowser downloaden
 
Und dann noch die rechtliche Seite

* erlaubt es Lidl, dass man ihre Seite parst?
* haben die womöglich eine API, welche die gewünschten Infos liefert? (REST, SOAP usw.)
* was wird mit den Bildern bemacht und braucht man dafür z.B. eine Erlaubnis? (Bildrechte)
* ...

juelin 7. Mär 2017 16:28

AW: Picture im Webbrowser downloaden
 
Hallo,
erst mal recht herzlichen Dank für die schnelle Hilfe.
Mit Indy kenne ich mich noch nicht so richtig aus.
Hier mein Code:

var MS: TMemoryStream;
var JPEG: TJPEGImage;

MS:=TMemoryStream.Create;
JPEG:=TJPEGImage.Create;
try
// IdHTTP1.get('https://www.lidl.de'+artbild2,MS);
IdHTTP1.get('https://www.lidl.de/media/product/0/0/1/9/7/5/6/rotkaeppchen-sekt-trocken-regular--5.jpg',MS);
Ms.Seek(0,soFromBeginning);
JPEG.LoadFromStream(MS);
Image1.Picture.Assign(JPEG);
finally
FreeAndNil(JPEG);
FreeAndNil(MS);
end;

Bei dem Befehl: IdHttp1.get bekomme ich folgende Fehlermeldung:
Exception der Klasse EIdIOHandlerPropInvalid mit der Meldung "Wert für IOHandler ist ungültig"

Kannst Du mir da helfen?
Danke und Gruß Jürgen

pesi 7. Mär 2017 16:51

AW: Picture im Webbrowser downloaden
 
Hmmm... was spricht denn gegen den Befehl UrlDownloadToFile ??? Der macht doch genau das, eine Datei X aus dem Internet mit Name Y lokal speichern :shock:

juelin 7. Mär 2017 17:09

AW: Picture im Webbrowser downloaden
 
in welcher Komponente ist die Methode URLDownloadToFile ?

TiGü 7. Mär 2017 17:10

AW: Picture im Webbrowser downloaden
 
Zitat:

Zitat von juelin (Beitrag 1363458)
in welcher Komponente ist die Methode URLDownloadToFile ?

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

t.roller 7. Mär 2017 17:44

AW: Picture im Webbrowser downloaden
 
WinApi.UrlMon, //UrlDownloadToFile
Delphi-Quellcode:
---
var ZDF, FNsav : String;
...
ZDF:= PChar(FileName);
FNsav:= PChar(Pfad + FileName);
if UrlDownloadToFile(nil, PChar(ZDF), PChar(FNsav), 0, nil)= S_OK then...
...

mjustin 7. Mär 2017 20:27

AW: Picture im Webbrowser downloaden
 
Zitat:

Zitat von juelin (Beitrag 1363453)
Bei dem Befehl: IdHttp1.get bekomme ich folgende Fehlermeldung:
Exception der Klasse EIdIOHandlerPropInvalid mit der Meldung "Wert für IOHandler ist ungültig"

Das passiert wenn man eine ältere Indy Version verwendet :)

Neuere Indy Versionen erzeugen bei einer HTTPS Adresse automatisch den IOHandler mit SSL/TLS Unterstützung *). Es gibt also zwei Lösungen:

a) Indy aktualisieren (es muss nicht in der Komponentenpalette installiert werden, man kann auch die Core/Protocol/System Verzeichnisse in den Projektsuchpfad aufnehmen)
b) eine TIdSSLIOHandlerSocketOpenSSL Komponente hinzufügen und sie dann der Property IdHTTP1.IOHandler zuweisen

Ausserdem müssen die OpenSSL DLLs im Suchpfad liegen.

*) Wie unter http://www.indyproject.org/sockets/b.../20141222.aspx beschrieben, muss die Unit in der der IOHandler enthalten ist explizit in der uses Klausel angegeben werden


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 Uhr.

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