Mi sono messo alle prese con l'utilizzo di PhantomJS/Selenium/python-selenium per scaricare un file nel filesystem. Sono in grado di navigare facilmente attraverso il DOM e fare clic, hover ecc. Il download di un file, tuttavia, si rivela piuttosto problematico. Ho provato un approccio headless con Firefox e pyvirtualdisplay, ma non funzionava bene ed era incredibilmente lento. So che CasperJS consente il download di file. Qualcuno sa come integrare CasperJS con Python o come utilizzare PhantomJS per scaricare i file. Molto apprezzato.Utilizzo di Selenium con Python e PhantomJS per scaricare il file sul filesystem
risposta
PhantomJS attualmente non supporta i download di file. questioni rilevanti con soluzioni:
Per quanto ho capito, di avere almeno 3 opzioni:
- interruttore a
casperjs
(e si dovrebbe lasciare pitone qui) - provare con headless su
xvfb
- passare alla normale browser non-senza testa
Anche qui ci sono alcuni link che potrebbero aiutare anche:
Nonostante questa domanda sia piuttosto vecchia, il download dei file tramite PhantomJS
rappresenta ancora un problema. Ma possiamo usare PhantomJS per ottenere il link per il download e recuperare tutti i cookie necessari come i token csrf e così via. E poi possiamo usare requests
per scaricarlo in realtà: deve apparire
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)
E ora in response.content
contenuto del file vero e proprio. Possiamo poi scriverlo con open
o fare quello che vogliamo.
Il mio caso d'uso richiedeva l'invio di un modulo per recuperare il file. Sono stato in grado di farlo utilizzando la funzione execute_async_script()
del driver.
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)
Non è possibile in questo modo. Puoi usare altre alternative per scaricare file come wget o curl.
usare Firefox per trovare la richiesta giusta e selenio per ottenere i valori per questo e, infine, utilizzare fuori alla casella di scaricare il file
curlCall=" curl 'http://www_sitex_org/descarga.jsf' -H '...allCurlRequest....' > file.xml"
subprocess.call(curlCall, shell=True)
- 1. Utilizzo di PhantomJS con Selenium Webdriver e Python
- 2. Selenium Python Headless Webdriver (PhantomJS) non funziona
- 3. Python + Selenium + PhantomJS render to PDF
- 4. Cattura della rete con Selenium/PhantomJS
- 5. PhantomJS in modo casuale non esce (usando Selenium con Python)
- 6. Come scaricare più file su Chrome con Capybara/Selenium?
- 7. come utilizzare la proprietà-segnaposto per il file sul filesystem
- 8. Utilizzo di CURL per scaricare il file e visualizzare le intestazioni e il codice di stato
- 9. Come scaricare file CSV con poltergeist usando Capybara su phantomjs?
- 10. Utilizzo di javascript per scaricare il file come file.csv
- 11. AFNetworking - Utilizzo di AFHTTPRequestOperation per scaricare il file?
- 12. Mostra la pagina durante il test con PhantomJS attraverso Selenium
- 13. Imposta il profilo di Firefox per scaricare i file automaticamente utilizzando Selenium e Java
- 14. Python: selenio con origine pagina PhantomJS vuota
- 15. È possibile utilizzare Selenium WebDriver per guidare PhantomJS?
- 16. È possibile bloccare il file sqlite sul filesystem NFS?
- 17. Schermata trasparente con PhantomJS in selenio [Python]?
- 18. Rileva audio con Selenium Webdriver e Python
- 19. Utilizzo di Maven per scaricare solo JAR
- 20. Utilizzo di jquery ajax per scaricare un file binario
- 21. PhantomJS scaricare utilizzando un collegamento javascript
- 22. Proxy + Selenium + PhantomJS non può cambiare User-Agent
- 23. git-merge con repository sul filesystem locale
- 24. Come implementare PhantomJS con Selenium WebDriver usando java
- 25. Python Selenium con Phantomjs - Clic fallito: ReferenceError: Impossibile trovare la variabile
- 26. Problemi di connessione al webdiver phantomJs usando python e selenio
- 27. Utilizzo di R per scaricare il file di dati compresso, estrarre e importare i dati
- 28. Streaming scaricare file di grandi dimensioni con python-richieste interrompere
- 29. Utilizzo di Java per scaricare file da un URL HTTPS
- 30. Esecuzione di Selenium WebDriver utilizzando Python con estensioni (file .crx)
Sembra capacità di download di file da allora è stato aggiunto alla PhantomJS (compresi commenti in tal senso nel [thread che hai collegato a] (https://github.com/ariya/phantomjs/issues/10052)). Tuttavia, non sono sicuro che questo sia esposto in un modo facile da usare in selenio. –