AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia TWebbrowser-problem: Wie save ich PDF nach NAvigate to url
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von wschrabi · begonnen am 11. Mär 2021 · letzter Beitrag vom 15. Mär 2021
Antwort Antwort
Seite 1 von 2  1 2      
wschrabi

Registriert seit: 16. Jan 2005
437 Beiträge
 
#1

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

  Alt 11. Mär 2021, 14:44
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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

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

  Alt 11. Mär 2021, 16:33
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.
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
437 Beiträge
 
#3

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

  Alt 12. Mär 2021, 09:06
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

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>
Angehängte Dateien
Dateityp: zip demohttps-sigma mitTweBB.zip (644,1 KB, 2x aufgerufen)

Geändert von wschrabi (12. Mär 2021 um 09:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.123 Beiträge
 
Delphi 12 Athens
 
#4

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

  Alt 12. Mär 2021, 09:31
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
437 Beiträge
 
#5

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

  Alt 12. Mär 2021, 09:43
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.
Angehängte Dateien
Dateityp: txt 10_Request.txt (4,0 KB, 0x aufgerufen)
Dateityp: zip 10_Response.zip (279,4 KB, 1x aufgerufen)

Geändert von wschrabi (12. Mär 2021 um 09:47 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

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

  Alt 12. Mär 2021, 11:25
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.
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
437 Beiträge
 
#7

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

  Alt 12. Mär 2021, 12:26
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.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 12. Mär 2021, 14:45
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.

Geändert von Rolf Frei (12. Mär 2021 um 16:00 Uhr)
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
437 Beiträge
 
#9

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

  Alt 13. Mär 2021, 11:35
Lieber ROlf, besten DANK - ich habe wieder viel gelernt von Dir.
Mit Js habe ich fast noch keine Erfahrung.
Ich werde es testen.
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
437 Beiträge
 
#10

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

  Alt 14. Mär 2021, 07:24
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 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