Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   TWebbrowser-problem: Wie save ich PDF nach NAvigate to url (https://www.delphipraxis.net/207307-twebbrowser-problem-wie-save-ich-pdf-nach-navigate-url.html)

wschrabi 11. Mär 2021 14:44

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: https://stackoverflow.com/questions/...ia-twebbroswer

Vielleicht kann mir hier jemand helfen.
Besten DANK.:shock:

Der schöne Günther 11. Mär 2021 16:33

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.

wschrabi 12. Mär 2021 09:06

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. https://stackoverflow.com/questions/...wser-in-vb-net ist ein ähnliches Problem, das zeigt, dass es nicht so einfach gehen sollte.
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>

himitsu 12. Mär 2021 09:31

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.

wschrabi 12. Mär 2021 09:43

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.

Der schöne Günther 12. Mär 2021 11:25

AW: TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
 
Zitat:

Wenn man automatischen Download unterbinden möchte, kann ja Captchas machen. Oder?
Hat sich der Kerl der mein Rennrad vom Grundstück gestohlen hat wahrscheinlich auch gedacht. Ich hätte es ja anbinden oder ein Captcha davor machen können.

wschrabi 12. Mär 2021 12:26

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.

Rolf Frei 12. Mär 2021 14:45

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:
          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
          }));
Hier steht eigentlich alles was du wissen musst. Was du da nun heraussuchenn musst, sind folgende Angaben:
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:
{
              "bm-verify": "AAQAAAAC/////z9XYiAOFlcj9Lt0eFT3RUlm+aKxHYnvTPRAFXSNRSLcepeWiZZqkj2xcS2TL3iUZB03gFDHM5EI3xpViqBjhiGbvCXDDPplY9dJg4c/B3DIKbWDIimbkOv7UQZ/vHNoV+WZh/dYICBmxqZzRbRAC0LBcg3dzoQ3KGZYsd1NDyQbz/9uM6g00qlpfmQuYFfakmWzatEtey/keOo+GJJ7KTG3IONwFfyj94Fvf2MK9s1XKTU5bmt6xOm7EufK2C6b8JUPAfQwoYcjqlslOequo3SO+3Yaa7sS/fCw5U34ChSaTAGeqb2CkHjDYXt3XV80A15dkMzJNTE7A/I=",
              "pow": j
          }
4. Das Post von TIdHTTP aufrufen und die Antwort, welches dann vermutlich das PDF ist, speichern.

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.

wschrabi 13. Mär 2021 11:35

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:

wschrabi 14. Mär 2021 07:24

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

wschrabi 15. Mär 2021 09:07

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)

Rolf Frei 15. Mär 2021 14:23

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:
<meta http-equiv="refresh" content="5; URL='/MSDS/MSDS/PrintMSDSAction.do?name=msdspdf_210371032458650&bm-verify=AAQAAAAC_____wrLcWhUWFNc8xbwEKUlZCANK_Zvh-QZ_ztugh9dPd9wrHTBW4WGl05v22JoZZ8gEBXdDPvvr7e73QXlMppgPBevLKUSHledmXtdziB-Ra72p7plSt0MrYDRiXyGEZP2IxWu9Fv2wYNJclRhQ0anzM4jfKShmAi5iK6kIAEx5mJh_wKTqsGLLLUelYlgq4OBhVqIzPaFnj7upQT8c8osC7Wq5Dz3
JBwVqdI644vtcz9IiMxf5g4f1adaJ6rxCatr6Tq1PwWxuvOqbTA3zxx41g8H8vx9zorXQABxYf0pPKx07O3jVhqFvZd0vLA'">
Das würde dann diese URL ergeben: /MSDS/MSDS/PrintMSDSAction.do?name=msdspdf_210371032458650

wschrabi 15. Mär 2021 15:05

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 18:30 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