Selen Firefox WebDriver не делает полную загрузку PDF с Python - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь скачать PDF с python, из события java, а не html, и я уже изменил свои настройки Firefox, загрузка происходит, но при попытке открыть файл говорит, что файл должен быть поврежден или поврежден, я заметил, что когда веб-драйвер firefox выполняет загрузку, он не загружает все его байты, поэтому я не знаю, не дождется ли он завершения загрузки или что-то отсутствует в моем коде :

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


fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList", 2) 
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/pdf")
fp.set_preference("pdfjs.disabled",True)
fp.set_preference("browser.download.dir", "C:\\Users\\carlo\\Desktop\\
driver = webdriver.Firefox(firefox_profile=fp)
driver.get(the url which i cant give here)

Затем я открываю новое окно в коде и беру это под контроль, которое является веб-окном PDF, и использую это:

element= WebDriverWait(driver, 10).\until(EC.visibility_of_element_located((By.XPATH,"//*[@id='download']")))
element.click()

Дополнительно к этому, у него нет URL; это Java-событие, которое не сопровождается этим, и теперь оно начинает загрузку, но портит его. Я пытался подождать с time.sleep, но проблема все еще та же. Если есть способ установить предпочтение прямой загрузки без открытия нового окна с драйвером, это должно помочь, я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Кроме того, вы можете проверить, был ли файл загружен перед выходом из браузера:

import glob
import time

download_dir = "C:\\Users\\carlo\\Desktop"

def still_downloading(download_dir):
        files = glob.glob(download_dir+"/*.part")

        if len(files) > 0:
            return True

        return False

...
element.click()

while still_downloading(dl_location):
      print "still downloading..."
      time.sleep(1)

Таким образом, вам не нужно «угадывать» время, необходимое для загрузки вашего файла заранее.

0 голосов
/ 11 сентября 2018

Я уже разобрался, просто нужно добавить время в element.click.sleep (2)

...