我正在通过chromewebdriver(windows)使用selenium和python来自动执行从不同页面下载大量文件的任务。我的代码可以运行,但是解决方案远非理想:下面的函数单击网站按钮,该按钮会启动Java脚本函数,该函数会生成PDF文件,然后下载该文件。
我必须使用静态等待才能等待下载完成(丑陋)。我无法检查文件系统以确认下载何时完成,因为我使用的是多线程(从不同页面下载很多文件)一次),并且文件名也会在网站本身中动态生成。
我的代码:
def file_download(num, drivervar): Counter += 1 try: drivervar.get(url[num]) download_button = WebDriverWait(drivervar, 20).until(EC.element_to_be_clickable((By.ID, 'download button ID'))) download_button.click() time.sleep(10) except TimeoutException: # Retry once print('Timeout in thread number: ' + str(num) + ', retrying...') .....
是否可以在webdriver中确定下载完成?我想避免使用time.sleep(x)。
非常感谢。
您可以通过chrome://downloads/使用驱动程序进行导航来获取每次下载的状态。
chrome://downloads/
要等待所有下载完成并列出所有路径,请执行以下操作:
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); """) # waits for all the files to be completed and returns the paths paths = WebDriverWait(driver, 120, 1).until(every_downloads_chrome) print(paths)