![]() |
TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Hallo Leute,
also ich habe ein Frage: Ich habe eine HTML Site die mit JS einen iframe erzeugt. Den habe ich mit TWebBrowser extrahiert. Und ich kann nun den Iframe extra zum Saugen des PDFs aufrufen. Doch wie kann ich den Stream in TWebBrowser mitsichern? Mit Ole es nicht. oder? Hier meine Frage auf StackOverflow: ![]() Vielleicht kann mir hier jemand helfen. Besten DANK.:shock: |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Du möchtest eine PDF-Datei. Das was der Browser dir anzeigt ist nicht zwangsläufig das gleiche. Vielleicht hat der auch wiederum ein Skript (z.B. pdf.js) welches die PDF darstellt.
Versuch doch an die URL zur PDF zu kommen und lade das dann ganz normal herunter. |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Liste der Anhänge anzeigen (Anzahl: 1)
Ja DANKE, das habe ich auch schon versucht. Doch leider wird das PDF durch eine URL das ein JS Script drin hat erst geholt. Dh. bei der URL bekomme ich eine html mit Js.
Ich habe hier das ganze als DEMO gezippt. Wäre schön, wenn mir jemand sagen könnte, wie ich das PDF, das ja laut fiddler am PC ist, als File sichern kann. Besten DANK:roll: Lt. ![]() Ich habe es mit SBB v15 als HTTPSCLIENT versucht, doch da ja nur ein TWebBrowser das JavaScript interpertieren kann, hatte ich da auch keine Möglichkeit. Denn das JS sieht so aus:
Delphi-Quellcode:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta http-equiv="refresh" content="5; URL='/MSDS/MSDS/PrintMSDSAction.do?name=msdspdf_210371032458650&bm-verify=AAQAAAAC_____wrLcWhUWFNc8xbwEKUlZCANK_Zvh-QZ_ztugh9dPd9wrHTBW4WGl05v22JoZZ8gEBXdDPvvr7e73QXlMppgPBevLKUSHledmXtdziB-Ra72p7plSt0MrYDRiXyGEZP2IxWu9Fv2wYNJclRhQ0anzM4jfKShmAi5iK6kIAEx5mJh_wKTqsGLLLUelYlgq4OBhVqIzPaFnj7upQT8c8osC7Wq5Dz3JBwVqdI644vtcz9IiMxf5g4f1adaJ6rxCatr6Tq1PwWxuvOqbTA3zxx41g8H8vx9zorXQABxYf0pPKx07O3jVhqFvZd0vLA'" /> <title>Challenge</title> <script> var i = 1615541100; var j = i + Number("8946" + "7607"); </script> </head> <body style="background-color: ;"> <noscript> <iframe style="border: none; height: 100%; width: 100%;" src=""></iframe> </noscript> <script> var xhr = new XMLHttpRequest(); xhr.withCredentials = true; xhr.addEventListener("loadend", function() { try { var data = JSON.parse(xhr.responseText); if (data.hasOwnProperty('reload')) { if (data["reload"] == true) { document.location = document.location.href.replace(/[&?]bm-verify=.*/, ""); } } else if (data.hasOwnProperty('location')) { window.location.href = data["location"] } else { location.reload(); } } catch (e) { var data = {} location.reload(); } }); xhr.open("POST", "/_sec/verify?provider=interstitial", false); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(JSON.stringify({ "bm-verify": "AAQAAAAC/////z9XYiAOFlcj9Lt0eFT3RUlm+aKxHYnvTPRAFXSNRSLcepeWiZZqkj2xcS2TL3iUZB03gFDHM5EI3xpViqBjhiGbvCXDDPplY9dJg4c/B3DIKbWDIimbkOv7UQZ/vHNoV+WZh/dYICBmxqZzRbRAC0LBcg3dzoQ3KGZYsd1NDyQbz/9uM6g00qlpfmQuYFfakmWzatEtey/keOo+GJJ7KTG3IONwFfyj94Fvf2MK9s1XKTU5bmt6xOm7EufK2C6b8JUPAfQwoYcjqlslOequo3SO+3Yaa7sS/fCw5U34ChSaTAGeqb2CkHjDYXt3XV80A15dkMzJNTE7A/I=", "pow": j })); </script> </body> </html> |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Nur weil die PDF kostenlos runtergeladen werden dürfen, heißt das nicht, dass diese PDF auch "automatisiert" runtergeladen werden dürfen.
Wenn doch, dann gibt es bestimmt eine passende API. Goggle fand nichts, aber deren Technischer Support wird dabei bestimmt helfen können. |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Liste der Anhänge anzeigen (Anzahl: 2)
Danke, ja sonst müßte ich die PDFs manuell saugen.
Wenn man automatischen Download unterbinden möchte, kann ja Captchas machen. Oder? Es ist aber ja auch eine technische Herausforderung, das zusammen zu bringen. Hier mal der FIDDLER request und Response. |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Zitat:
|
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Hahaha - ja da haste recht.
Ich hab eine Lösung. Ich schicke einfach Keystrokes in die App. also wenn es im TWebBrowser angezeigt wurde, einfach SHIFT-CTRL-S für S (peichern), da ja der Acrobat PDF Viewer in der Componente dies erlaubt. Hahahha. Schade, dass es direkt mit Http so einfach nicht geht. |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Wenn ich alles richtg verstanden habe und du Zugriff auf den Quellcode hast, sollte es keine grosse Sache sein, aufgrund des JS die Datei per TIdHTTP runterzuladen. In dem JS steht ja eigentlich alles drin, was du wissen musst. Du musst da ein POST auf die Adresse machen und als Body das entsprechende JSON (mit dem Key oder as immer das genau ist) aus dem JS einfügen. Als Antwort erhälst du dann vermutlich das PDF.
Code:
Hier steht eigentlich alles was du wissen musst. Was du da nun heraussuchenn musst, sind folgende Angaben:
xhr.open("POST", "/_sec/verify?provider=interstitial", false);
xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(JSON.stringify({ "bm-verify": "AAQAAAAC/////z9XYiAOFlcj9Lt0eFT3RUlm+aKxHYnvTPRAFXSNRSLcepeWiZZqkj2xcS2TL3iUZB03gFDHM5EI3xpViqBjhiGbvCXDDPplY9dJg4c/B3DIKbWDIimbkOv7UQZ/vHNoV+WZh/dYICBmxqZzRbRAC0LBcg3dzoQ3KGZYsd1NDyQbz/9uM6g00qlpfmQuYFfakmWzatEtey/keOo+GJJ7KTG3IONwFfyj94Fvf2MK9s1XKTU5bmt6xOm7EufK2C6b8JUPAfQwoYcjqlslOequo3SO+3Yaa7sS/fCw5U34ChSaTAGeqb2CkHjDYXt3XV80A15dkMzJNTE7A/I=", "pow": j })); 1. Die URL: http..../_sec/verify?provider=interstitial 2. Der ContentType in TIdHTTP auf 'application/json' setzen. 3. Das JSON auslesen und im Body des TIdHTTP einfügen.
Code:
4. Das Post von TIdHTTP aufrufen und die Antwort, welches dann vermutlich das PDF ist, speichern.
{
"bm-verify": "AAQAAAAC/////z9XYiAOFlcj9Lt0eFT3RUlm+aKxHYnvTPRAFXSNRSLcepeWiZZqkj2xcS2TL3iUZB03gFDHM5EI3xpViqBjhiGbvCXDDPplY9dJg4c/B3DIKbWDIimbkOv7UQZ/vHNoV+WZh/dYICBmxqZzRbRAC0LBcg3dzoQ3KGZYsd1NDyQbz/9uM6g00qlpfmQuYFfakmWzatEtey/keOo+GJJ7KTG3IONwFfyj94Fvf2MK9s1XKTU5bmt6xOm7EufK2C6b8JUPAfQwoYcjqlslOequo3SO+3Yaa7sS/fCw5U34ChSaTAGeqb2CkHjDYXt3XV80A15dkMzJNTE7A/I=", "pow": j } Das Auslesen der URL und des JSON sollten keine Hexerei sein. Vermutlch beibt die URL für alle geliche und dann würdest du nur jeweils das JSON mit dem "Key" benötigen. EDIT: Habe eben mal angeschaut was eigentlich der Rest des JS macht. Du bekommst da ein weiteres JSON retour, in dem du den Link zum PDF finden solltest der mit dem du zumindest mal weiterkommst. |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Lieber ROlf, besten DANK - ich habe wieder viel gelernt von Dir.
Mit Js habe ich fast noch keine Erfahrung. Ich werde es testen. :thumb: |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Hallo lieber Rolf,
ich habe es zwar nicht mit Indy probiert, sondern mit Secure Black Box von Eldos, doch komme ich auf keinen grünen Zweig. Auch habe ich in dem Jason das "pow", da ja j zurückgibt, und das im Script aus 3 Zahlen berechnet wird, errechnet, doch weiss ich nicht so rechte wieso es nicht klappt. Kannst Du mir bitte deinen Test als Source posten, wo du das mit TidHTTP machst? Besten DANK |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Liste der Anhänge anzeigen (Anzahl: 1)
Lieber Rolf,
also ich hab mit Indy mal ein POST gemacht und als CustomsHeader die Cookies von vorhin hineingeschrieben und die JSON, so wie du sagtest. Doch bekomme ich als Antwort, zwar ok 200 aber nur ein JSON mit Reload. Wie und wo hast du den PDF URL bekommen. Danke. (Fiddler Req-Response im ZIP ALSO DOC BIld) |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Nur zur Info: Habe kein Testprogramm gemacht sondern nur auf das von dir gepostete HTML mit JS reagiert und geschaut was du da retour bekommst. Die ganzen Sachen im JS sind vermutlch bei jedem Aufruf anders. Du musst dann diese Angabe aus dem erhaltenen HTML heraussuchen, damit du im Delphi dann die selben Aufrufe machen kannst wie da das JS machen würde.
Scheint aber soweit mal schon zu stimmen, da du eine gültige Antwort erhälst. Das JS macht nun in diesem Fall diese Zeile: document.location = document.location.href.replace(/[&?]bm-verify=.*/, ""); Bin mir nicht zu 100% sicher was das genau macht (ist ein regex in dem ich nicht so gut Bescheid weiss), aber ich glaube da wird in der URL der Hauptseite, der ganze Parameter "bm-verify" entfernt und dann die Seite ohne diesen Parameter neu geladen. Du könntest das dann also auch mal versuchen. Ich denke die URL der Hauptseite entspricht dem <meta> im Sourcecode:
Code:
Das würde dann diese URL ergeben: /MSDS/MSDS/PrintMSDSAction.do?name=msdspdf_210371032458650
<meta http-equiv="refresh" content="5; URL='/MSDS/MSDS/PrintMSDSAction.do?name=msdspdf_210371032458650&bm-verify=AAQAAAAC_____wrLcWhUWFNc8xbwEKUlZCANK_Zvh-QZ_ztugh9dPd9wrHTBW4WGl05v22JoZZ8gEBXdDPvvr7e73QXlMppgPBevLKUSHledmXtdziB-Ra72p7plSt0MrYDRiXyGEZP2IxWu9Fv2wYNJclRhQ0anzM4jfKShmAi5iK6kIAEx5mJh_wKTqsGLLLUelYlgq4OBhVqIzPaFnj7upQT8c8osC7Wq5Dz3
JBwVqdI644vtcz9IiMxf5g4f1adaJ6rxCatr6Tq1PwWxuvOqbTA3zxx41g8H8vx9zorXQABxYf0pPKx07O3jVhqFvZd0vLA'"> |
AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Sehr schönen DANK, werde ich versuchen.:-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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