selenium firefox webdriver不能使用python完整下载PDF

时间:2018-09-10 17:15:04

标签: python selenium webdriver anaconda

我正尝试从Java事件而不是html中使用python下载PDF,并且我已经更改了firefox偏好设置,可以进行下载,但是当我尝试打开文件时说文件必须损坏或损坏,我注意到当firefox webdriver进行下载时,它不会下载所有字节,因此我不知道它是否不等到下载完成或我的代码中是否缺少某些内容:

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 Web窗口,并使用此窗口:

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

此外,它没有URL;这是一个Java事件,它没有附带,现在它开始下载,但破坏了下载。我尝试等待time.sleep,但是仍然有相同的问题。如果有一种方法可以设置直接下载的首选项,而无需使用驱动程序打开新窗口,这应该有所帮助,那么我是否有所遗漏?

2 个答案:

答案 0 :(得分:0)

我已经弄清楚,只需在element.click.sleep(2)中添加时间即可

答案 1 :(得分:0)

此外,您可以在退出浏览器之前验证文件是否已下载:

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)

这样,您不必“猜测”事先下载文件所需的时间。