Plik z www zapisuje się pusty

0

Gdy pobieram automatycznie plik za pomocą send_keys() to problemu nie ma, ale plik ma automatycznie nadawaną nazwę. Gdy chce zapisać go z wybraną nazwą w wybranej lokalizacji to zapisuje się on ale jest pusty.

Poniżej fragment kodu. Z góry dziękuje za wskazówki.

import requests
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

filepath = r'C:\Users\xxx\OneDrive\Desktop\test.xlsx'
browser = webdriver.Edge()

-----------------------------------

file_url = download_limits1.get_attribute("href")
while True:
    response = requests.get(file_url, stream=True)
    if response.status_code == 200:
        with open(filepath, 'wb') as file:
            for chunk in response.iter_content(8192):
                file.write(chunk)
        break
0

Co jest send_keys , co to jest za plik, który się pobiera, a zapisuje pusty?

0

Skrypt doprowadza do miejsca gdzie jest link po kliknięciu na niego następuje automatyczne pobranie pliku z danymi w formacie xlsx. Gdy używam metody z selenium send_keys() to skrypt działa, plik się pobiera do folderu wskazanego w przeglądarce. Pytanie jak ten plik zapisać pod zdefiniowaną nazwą i wskazanym miejscu.

0

Czyli problem jest z tym:

        with open(filepath, 'wb') as file:
            for chunk in response.iter_content(8192):
                file.write(chunk)

kawałkiem kodu?

0

Tak. Zastanawiam się czy nie muszę wykorzystać np. pandas, choć żadnych operacji na pliku nie chcę robić.

0

Na Pythonie 3.11 i requests w wersji 2.28.2 inkryminowany kod działa perfekcyjnie. Tu: response = requests.get(file_url, stream=True) na pewno jest zawartość w response?

0

Jest w response. Zmodyfikowałem trochę kod ale tu także tworzy się pusty plik. Gdy wkleję w przeglądarkę adres z file_url (gdy jestem zalogowany) to plik pobiera się automatycznie. Brak mi już pomysłów.

file_url = 'https://ekstranet.kuke.com.pl(...)'
file_path = r'C:\Users\xxx\OneDrive\Desktop\test.xlsx'

response = requests.get(file_url)
if response.status_code == 200:
    with open(file_path, 'wb') as file:
        file.write(response.content)

0

Teraz zmieniłeś zapis pliku; ale to nic, podejrzyj co tam się dzieje pod debugerem, spróbuj zapisać testowo cokolwiek do pliku, etc...

0

Próbowałem wyświetlić cześć informacji z tego pliku, pojawia się błąd: raise BadZipFile("File is not a zip file") zipfile.BadZipFile: File is not a zip file.
Gdy ten plik automatycznie się pobierze w folderze pobierania to mogę z dysku wyświetlić bez problemu dane.
Wydaje się, że ten plik powstaje dopiero w momencie zapisania na dysku i gdy się odwołuje do file_url to tego pliku chyba wówczas jeszcze nie ma.

file_url = 'https://ekstranet.kuke.com.pl(...)'


df = pd.read_excel(file_url, engine='openpyxl')
print(df.head(15))

0

a jaki jest href w tym pliku, nie ma pod ten link podpiętego jakiegoś kodu javascript? Podglądałeś zapytania i odpowiedzi jakimś fiddlerem? Może robi się przekierowanie, ustaw allow_redirects=True. Jak debugujesz to widzisz części pliku w chunk? Ile razy się wykonuje file.write(chunk)?

muad napisał(a):

Próbowałem wyświetlić cześć informacji z tego pliku, pojawia się błąd: raise BadZipFile("File is not a zip file") zipfile.BadZipFile: File is not a zip file.

to w końcu jest pusty czy nie? Ile zajmuje miejsca? Czy response.status_code na pewno jest 200?

Zainstaluj fiddler i po prostu postaraj się żeby zapytanie do serwera wyglądało tak samo jak z przeglądarki. Może jest potrzebny referer albo jakieś ciastko. Podejrzewam to ostatnie - skoro chodzisz po stronie edge webdriverem a pobierasz plik finalnie przez requests to nie ma on zapamiętanej żadnej sesji i pewnie serwer tego nie przepuszcza

0
muad napisał(a):

Próbowałem wyświetlić cześć informacji z tego pliku, pojawia się błąd: raise BadZipFile("File is not a zip file") zipfile.BadZipFile: File is not a zip file.
Gdy ten plik automatycznie się pobierze w folderze pobierania to mogę z dysku wyświetlić bez problemu dane.
Wydaje się, że ten plik powstaje dopiero w momencie zapisania na dysku i gdy się odwołuje do file_url to tego pliku chyba wówczas jeszcze nie ma.

file_url = 'https://ekstranet.kuke.com.pl(...)'


df = pd.read_excel(file_url, engine='openpyxl')
print(df.head(15))

Zrzut ekranu 2023-11-03 151945.png
Plik w sumie ma 14b i jest pusty (gdy za pomocą kodu "klikam" to plik się pobiera ok (.xlsx), z automatycznie nadawaną nazwą do folderu wskazanego w przeglądarce).
Pozostałe sugestie (z które dziękuje) potestuje wieczorem. Choć to już wykracza poza moją obecną wiedzę.

Zrzut ekranu 2023-11-03 152707a.png).

1 użytkowników online, w tym zalogowanych: 0, gości: 1