Mit Selen, Bilder von der Seite
Ich bin mit Selen & Google-Chrome-Treiber zu öffnen Seiten programmgesteuert. Auf jeder Seite befindet sich ein dynamisch generiertes Bild, die ich herunterladen möchten. Im moment warte ich auf die Seite geladen ist, dann schnappe ich mir die Bild-URL und laden Sie es mit System.Net.WebClient.
Dass funktioniert einwandfrei außer das ich das herunterladen der Bilder zweimal - einmal im browser, einmal mit WebClient. Das problem ist, dass jedes Bild etwa 15 MB und das herunterladen zweimal summiert sich schnell.
So ist es möglich, schnappen Sie sich das Bild direkt aus Google Chrome?
- können Sie teilen Ihren code zum herunterladen des Bildes von der Seite.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Weg ist, um base64-Zeichenfolge des Bildes mit javascript, das ausgeführt wird, von webdriver. Dann können Sie speichern base64string der Bild-Datei.
Grundsätzlich, wenn Ihr Bild ist
dann können Sie es konvertieren, wie
Ja, tun Sie dies in mehreren Schritten:
Beispiel-code - bitte fügen Sie Ihren code zum abfangen von Ausnahmen
die Methode CropImage wurde geschrieben von James Hill,
Wie schneidet ein Teil des Bildes in C#
aber ich werde es auch hier für Klarheit
Alle oben genannten Antworten arbeiten. Aber Sie alle haben Einschränkungen. mecek Methode ist cool, aber es funktioniert nur auf Browsern, die Unterstützung von html 5 (obwohl die meisten Browser tun), und es wird ein downgrade die Bildqualität. Die screenshot-Methode wird auch ein downgrade die Bildqualität. Mit System.Net.WebClient können dieses Problem vermeiden, aber nicht in der Fall der Download ein captcha-Bild. Eigentlich der einzige Weg, der funktioniert für mich beim Download ein captcha-Bild ist durch die Aktionen der Klasse (oder Roboter, wenn Sie mit Selen die java-version), so etwas wie unten:
Dies ist der einzige Weg, den ich gefunden habe download ein captcha-Bild ohne Verlust seiner Qualität (für bessere OCR-Effekte) mit Selen Chrom Treiber, obwohl die Beschränkung ist auch offensichtlich.
Basierend auf meceks Antwort, ich benutze eine version die folgenden mit tollen Ergebnissen zur Erfassung der webdriver Bild.
Es erstellt eine jpeg base64-string bei 90% Qualität. Um zu vermeiden, pixelation Probleme, ich zeichne das Bild auf eine Leinwand, die größer ist als das, was ich präsentieren das Bild auf später. Das Bild ist daher bis-skaliert am besten einer box 600 Pixel, während die Erhaltung der Seitenverhältnisse.
Da jpeg keine Transparenz unterstützt ich klar den Rahmen mit einem weißen hintergrund.
Können Sie verhindern, dass Bilder heruntergeladen werden, in Google Chrome mit diese Technik. Es läuft ein Google Chrome-Erweiterung namens "Block-Image". Diese Weise wird das Bild nicht heruntergeladen werden die Verwendung von chrome, und es ist nur eine Frage der Download des Bildes als normal mit seiner URL & Systems.Net.WebClient.
Spricht von Selen.
Htmlunit ?
Sowieso, warum nicht Sie verwenden webclient (htmlunit-driver) oder Reine htmlunit (http://htmlunit.sourceforge.net/). Htmlunit nicht laden Bilder standardmäßig.
Können Sie laden Sie Sie auf, wie pro Ihre Anforderung.
Haben wollen Sie laden Sie das Bild mit ImageIO?