Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 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