Zmagam się z użyciem PhantomJS/Selenium/python-selenium, aby pobrać plik do systemu plików. Jestem w stanie łatwo poruszać się po DOM i klikać, najeżdżać itp. Pobieranie pliku okazuje się jednak dość kłopotliwe. Próbowałem bezgłowego podejścia z Firefoxem i pyvirtualdisplay, ale to też nie działało dobrze i było niewiarygodnie powolne. Wiem, że CasperJS pozwala na pobieranie plików. Czy ktoś wie jak zintegrować CasperJS z Pythonem lub jak wykorzystać PhantomJS do pobierania plików? Bardzo doceniane.Używanie Selenium z Pythonem i PhantomJS do pobrania pliku do systemu plików
Odpowiedz
PhantomJS obecnie nie obsługuje pobierania plików. Istotne problemy z obejścia:
O ile mi zrozumieć, trzeba co najmniej 3 opcje:
- przełączyć się
casperjs
(i należy pozostawić Pythona tutaj) - spróbuj bez głowy na
xvfb
- przełącznik do normalnych przeglądarek nie bezgłowe
Oto również kilka linków, które mogą pomóc też:
Mimo to pytanie jest dość stare, pobieranie plików przez PhantomJS
nadal stanowi problem. Ale możemy użyć PhantomJS, aby uzyskać łącze pobierania i pobrać wszystkie potrzebne pliki cookie, takie jak tokeny csrf i tak dalej. A potem możemy użyć requests
go pobrać rzeczywiście: powinien pojawić
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)
i teraz w response.content
rzeczywista zawartość pliku. Możemy następnie napisać to przy pomocy open
lub zrobić, co chcemy.
Mój przypadek użycia wymagał przesłania formularza w celu pobrania pliku. Udało mi się to osiągnąć, korzystając z funkcji sterownika kierowcy execute_async_script()
.
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)
Nie można tego zrobić w ten sposób. Możesz użyć innych alternatyw, aby pobierać pliki, takie jak wget o curl.
Zastosowanie firefox znaleźć odpowiedni wniosek i selen, aby uzyskać wartości, które i wreszcie korzystać z do pudełka, aby pobrać plik
curlCall=" curl 'http://www_sitex_org/descarga.jsf' -H '...allCurlRequest....' > file.xml"
subprocess.call(curlCall, shell=True)
- 1. Używanie PhantomJS z Selenium Webdriver i Python
- 2. Używanie jquery ajax do pobrania pliku binarnego
- 3. AFNetworking - Używanie AFHTTPRequestOperation do pobrania pliku?
- 4. Odtwórz zestaw plików do pobrania nazwa pliku
- 5. Python + Selenium + PhantomJS render do PDF
- 6. Używanie sed do pobrania nazwy pliku z pełnej ścieżki?
- 7. Używanie javascript do pobrania pliku jako pliku .csv
- 8. Używanie OperatingSystemMXBean do pobrania procesora
- 9. Phantomjs dołącz do pliku fs.write
- 10. Selenium/PhantomJS podnosi błąd
- 11. Jak wdrożyć do pobrania pliku z AJAX i MVC
- 12. Przechwytywanie sieci za pomocą Selenium/PhantomJS
- 13. python - tworzenie pliku do pobrania
- 14. typ zawartości do pobrania pliku mp3
- 15. Używanie java do pobrania bieżącego właściciela procesu
- 16. selenium PhantomJS send_keys nie działa
- 17. Używanie R do akceptowania plików cookie w celu pobrania pliku PDF
- 18. Używanie MultipartPostHandler do POST-danych formularzy z Pythonem
- 19. Użycie file.managed do pobrania pliku w Salt
- 20. Rozszerzenie Chrome do systemu plików
- 21. Używanie systemu plików jako źródła filmów do odtwarzania offline
- 22. Obsługa plików do pobrania w QtWebEngine
- 23. Używanie CURL i PHP do pobrania cookie Facebooka po zalogowaniu
- 24. Ograniczanie dostępu do prywatnych plików do pobrania w Django
- 25. Używanie Pythona do dodawania listy plików do pliku zip
- 26. Używanie pySerial z Pythonem 3.3
- 27. HTML 5 wielu plików do pobrania z PHP
- 28. Jak zrobić tymczasowy odnośnik do pobrania pliku
- 29. Tworzenie miniaturek z plików wideo z Pythonem
- 30. Używanie funkcji T-SQL do zapytań o folder systemu plików
Wydaje możliwość pobierania plików został już dodany do PhantomJS (w tym komentarze do tego efektu w [wątku, z którym jesteś połączony] (https://github.com/ariya/phantomjs/issues/10052)). Jednak nie jestem pewien, czy jest to w łatwy sposób widoczne w Selenium. –