【发布时间】:2018-06-24 02:28:45
【问题描述】:
我通过 chromewebdriver (windows) 使用 selenium 和 python 来自动执行从不同页面下载大量文件的任务。 我的代码有效,但解决方案远非理想:下面的函数单击网站按钮,启动生成 PDF 文件然后下载的 java 脚本函数。
我不得不使用静态等待来等待下载完成(丑陋)我无法检查文件系统以验证下载何时完成,因为我正在使用多线程(下载大量文件一次从不同的页面),并且文件的名称是在网站本身中动态生成的。
我的代码:
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)。
非常感谢。
【问题讨论】:
-
如果 UI 中没有任何内容表示完成,那么除了检查文件系统之外没有其他方法可以判断。为什么你不能这样做?
-
我以前从未尝试过,但是您可以将下载路径设置为某个特定值吗?例如每次运行创建一个带时间戳的文件夹,然后将下载路径指向该文件夹?这样,您每个文件夹只会获得一个文件,并且能够确定下载何时完成。我的理解是,在实例化驱动程序后,您无法更改下载路径,因此如果您尝试这种方法,请记住这一点。您可以编写另一个脚本,在第一个脚本完成后进行清理,例如获取所有文件并将它们放入单个文件夹并删除所有子文件夹。
标签: python-3.x selenium selenium-chromedriver