2017-03-20 3 views
1

Von dem, was ich sagen kann, erfordert die Website einen Klick auf die Schaltfläche, die einige Javascript ausgeführt und sendet dann eine POST-Anfrage. Die POST-Anfrage gibt eine PDF zurück. Alle Lösungen, die ich zum Herunterladen einer Datei gefunden habe, verwenden entweder WebClient (aber ich habe keine URL für die PDF) oder HTTPRequest (die keinen Klick aufrufen kann).Wie lade ich eine PDF-Datei von einer Javascript-generierten POST-Anfrage herunter?

Ich kann an den Punkt des Aufrufs mit WebBrowser aufrufen, und ich kann mit Fiddler sehen, dass die PDF in der Antwort der Website zurückgegeben wird, aber ich habe keine Ahnung, wie Sie es auf meinem Computer bekommen.

+0

Zeigt Ihnen nicht Fiddler die Ajax-Anfrage? – Crowcoder

+0

Das ist ein neuer Begriff für mich, aber wenn Sie die Post-Anfrage und Header und so, ja meinen. Einige der Werte in der Postanforderung scheinen jedoch dynamisch vom Javascript der Website oder etwas anderem generiert zu werden. Es verwendet ein Token, das sich jedes Mal ändert. Ansonsten würde ich einfach HTTPRequest verwenden. –

+1

Das ist wahrscheinlich ein Cross Site Request Forgery Token. Ich weiß nicht, ob Sie über das WebBrowser-Steuerelement auf eine Antwort zugreifen können. Wenn nicht, müssten Sie sehr detaillierte Anfrage/Antwort-Traces bereitstellen, damit jemand diese Frage beantworten kann. – Crowcoder

Antwort

0

Ich konnte dies mit Selen lösen, mit den folgenden Konfigurationseinstellungen in den Treiber Firefox übergeben:

profile = Firefox.FirefoxProfile() 
profile.SetPreference("browser.download.dir", saveDir) 
profile.SetPreference("browser.download.folderList", 2) 
profile.SetPreference("browser.helperApps.neverAsk.saveToDisk","application/pdf") 
profile.SetPreference("pdfjs.disabled",True) 
profile.SetPreference("browser.tabs.remote.autostart", False) 
profile.SetPreference("browser.tabs.remote.autostart.1", False) 
profile.SetPreference("browser.tabs.remote.autostart.2", False) 
profile.SetPreference("browser.tabs.remote.force-enable", "false") 
driver = Firefox.FirefoxDriver(profile) 

Wo saveDir das Ziel Download-Verzeichnis ist. In der ersten Hälfte dieser Konfigurationseinstellungen wird Firefox ohne Aufforderung heruntergeladen, und der Wert für browser.helperApps.neverAsk.saveToDisk ist ein MIME-Typ. Die zweite Hälfte der Configs verhindert, dass Firefox abstürzt, wenn driver.Quit() aufgerufen wird.

Verwandte Themen