herunterzuladen Ich habe mich mit PhantomJS/Selen/Python-Selen beschäftigt, um eine Datei in das Dateisystem herunterzuladen. Ich kann leicht durch das DOM navigieren und klicken, schweben usw. Herunterladen einer Datei erweist sich jedoch als ziemlich mühsam. Ich habe einen kopflosen Ansatz mit Firefox und pyvirtualdisplay versucht, aber das funktionierte auch nicht gut und war unglaublich langsam. Ich weiß, dass CasperJS Dateidownloads erlaubt. Kann jemand CasperJS mit Python integrieren oder PhantomJS verwenden, um Dateien herunterzuladen? Sehr geschätzt.Verwenden von Selen mit Python und PhantomJS, um Datei in das Dateisystem
Antwort
PhantomJS unterstützt derzeit keine Dateidownloads. Relevante Fragen mit Lösungen:
Soweit ich verstehe, Sie haben mindestens 3 Möglichkeiten:
- Schalter auf
casperjs
(und Sie sollten Python verlassen hier) - versuchen mit kopflos auf
xvfb
- Schalter in den normalen Nicht-Headless Browser
Hier sind auch einige Links, die helfen könnten:
Trotz dieser Frage ist ziemlich alt, das Herunterladen von Dateien über PhantomJS
ist immer noch ein Problem. Aber wir können PhantomJS verwenden, um Download-Link zu erhalten und alle benötigten Cookies wie csrf-Tokens usw. zu holen. Und dann können wir requests
verwenden Sie es zum Download tatsächlich:
import requests
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get('page_with_download_link')
download_link = driver.find_element_by_id('download_link')
session = requests.Session()
cookies = driver.get_cookies()
for cookie in cookies:
session.cookies.set(cookie['name'], cookie['value'])
response = session.get(download_link)
und jetzt in response.content
tatsächlichen Dateiinhalt sollte angezeigt werden. Wir können es als nächstes mit open
schreiben oder tun, was wir wollen.
Mein Anwendungsfall erforderte eine Formularübergabe, um die Datei abzurufen. Ich konnte dies mit der execute_async_script()
Funktion des Treibers erreichen.
js = '''
var callback = arguments[0];
var theForm = document.forms['theFormId'];
data = new FormData();
data.append('eventTarget', "''' + target + '''"); // this is the id of the file clicked
data.append('otherFormField', theForm.otherFormField.value);
var xhr = new XMLHttpRequest();
xhr.open('POST', theForm.action, true);
'''
for cookie in driver.get_cookies():
js += ' xhr.setRequestHeader("' + cookie['name'] + '", "' + cookie['value'] + '"); '
js += '''
xhr.onload = function() {
callback(this.responseText);
};
xhr.send(data);
'''
driver.set_script_timeout(30)
file = driver.execute_async_script(js)
Ist auf diese Weise nicht möglich. Sie können andere Alternativen verwenden, um Dateien wie wget o curl herunterzuladen.
Verwenden firefox die richtige Anfrage und Selen zu finden, die Werte für die und schließlich an die Box aus, die Datei herunterzuladen
curlCall=" curl 'http://www_sitex_org/descarga.jsf' -H '...allCurlRequest....' > file.xml"
subprocess.call(curlCall, shell=True)
- 1. Python Selen - mit PhantomJS Proxy
- 2. PhantomJS aus Selen - Python
- 3. Phantomjs durch Selen in Python
- 4. Python: Selen mit PhantomJS leere Seite Quelle
- 5. nicht Datei mit PhantomJS hochladen (und Selen WebDriver)
- 6. Griff tinymce Fenster mit Python, Selen und PhantomJS
- 7. Wie kann phantomJS mit Argumenten in Selen mit Python starten?
- 8. Limit Speicherverbrauch von Phantomjs mit Selen-Webdriver?
- 9. Verwenden von PhantomJS mit Selenium Webdriver und Python
- 10. Wie setze ich Cookies in Phantomjs mit Selen mit Python?
- 11. Selen/PhantomJS löst Fehler
- 12. selen PhantomJS send_keys funktioniert nicht
- 13. PhantomJS 1.8 mit Selen auf Python. Wie blockiere ich Bilder?
- 14. Wie öffne ich eine neue Registerkarte in Python mit Selen und PhantomJS
- 15. Benutzer-Agent mit selen-webdriver und phantomjs in nodejs setzen
- 16. Wie Python und Selen verwenden, um eine ExtJS Taste
- 17. So löschen Sie Sitzung mit Selen und PhantomJS
- 18. Selen und Phantomjs nicht öffnen Javascript Seite
- 19. Selen mit Python auf Ubuntu verwenden 14.04
- 20. Akzeptieren Sie ein Popup mit Phantomjs mit Selen
- 21. Ich möchte Selen verwenden, um einen Rahmen mit Python
- 22. Wie man die Fenstergröße mit phantomjs und selen webdriver in Python einstellt
- 23. XML-Datei (mit XStream) in das Dateisystem in Java schreiben
- 24. Python Crawler DOM Informationen zu erhalten, indem Selen und PhantomJS mit
- 25. Arbeiten mit Python von einem FAT32-Dateisystem
- 26. Datei mit Selen herunterladen
- 27. rekursiv navigieren das Dateisystem, um Dateien in Paaren zu analysieren
- 28. Verwenden von Msbuild, um ein Dateisystem-Profil zu veröffentlichen
- 29. Hinzufügen von Cookies mit Selenium Ghostdriver PhantomJS mit Python
- 30. Python selen phantomJS element.location gibt falschen Ort zurück
Es scheint, Datei-Download-Fähigkeit ist seit dem zu PhantomJS hinzugefügt benutzen Sie (einschließlich Kommentare dazu in dem [Thread, den Sie verlinkt haben] (https://github.com/ariya/phantomjs/issues/10052)). Ich bin mir jedoch nicht sicher, ob dies in Selenium einfach zu handhaben ist. –