Загрузка файла Excel с использованием Python Selenium - PullRequest
1 голос
/ 25 сентября 2019

Я создал простой Python для загрузки файла Excel из Интернета, я использую Python и Selen с Chromedriver, проблема в том, что когда загрузка завершена и файл сохранен, я не могу прочитать этот файл Excel (пробовал с Libreoffice, MsExcel), но его можно прочитать, когда я вручную загружаю этот файл без Selenium, когда я пытался прочитать этот файл, используя python xlrd ошибка: zipfile.BadZipFile: Bad magic number for file header

сначала я думал, что загрузка еще не законченапотому что закрытие браузера слишком рано, попытался увеличить sleep(20, но результат тот же.

Есть ли что-то, что я пропустил в процессе, над которым я работал?

здесьмой скрипт на python.

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

def every_downloads_chrome(driver):
    if not driver.current_url.startswith("chrome://downloads"):
        driver.get("chrome://downloads/")
    return driver.execute_script("""
        var items = downloads.Manager.get().items_;
        if (items.every(e => e.state === "COMPLETE"))
            return items.map(e => e.fileUrl || e.file_url);
        """)

uri = "https://cfs.ojk.go.id/cfs/ReportViewerForm.aspx?BankCode=PT.+BPR+Cikarang+Raharja&Month=3&Year=2019&FinancialReportPeriodTypeCode=R&FinancialReportTypeCode=BPK-900-000002"
option = webdriver.ChromeOptions()
option.add_argument("--incognito")
option.add_argument("--window-size=400,400")
option.add_argument('disable-component-cloud-policy')
option.add_experimental_option("prefs", {
  "download.prompt_for_download": False,
  "download.directory_upgrade": False,
  "safebrowsing.enabled": True
})
browser = webdriver.Chrome(executable_path=chromedriver_path, options=option)
browser.get(uri)
timeout = 20
try:
    WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="CFSReportViewer_ctl05_ctl04_ctl00_ButtonImg"]')))
except TimeoutException:
    browser.quit()

#Download the file by execute JS Command
browser.execute_script("$find('CFSReportViewer').exportReport('EXCELOPENXML');")

#wait until download is finish
WebDriverWait(browser, 120,1).until(every_downloads_chrome)

#break 2 second and quit
time.sleep(2)
browser.quit()

Я пытаюсь загрузить Excel с этого сайта

https://cfs.ojk.go.id/cfs/ReportViewerForm.aspx?BankCode=PT.+BPR+Cikarang+Raharja&Month=3&Year=2019&FinancialReportPeriodTypeCode=R&FinancialReportTypeCode=BPK-900-000002

Кстати, я использую Mac OS с Chrome 77 и Chromedrive 77.0.3865.40

вот кейс видео https://drive.google.com/file/d/1N6q66AVpo4XtrZemxoD5E94xUohzcaNx/view

1 Ответ

0 голосов
/ 25 сентября 2019

У меня нет проблем, если я изменю javascript на нажатие тега a

browser.execute_script('document.querySelector("[alt=Excel]").click();')
...