Selenium 不等待文件下载并继续忽略 while 循环

问题描述

我正在编写一个脚本来将一些 youtube 视频下载到 mp3 中,并希望代码开始一次下载,然后继续另一个和另一个等等。问题是,在第一次下载完成后,有些东西中断并开始跳过下载而不是等待下载完成继续。这是我写的,希望你能帮助我:

    for names in items:
    stringName = "".join(names)
    driver.get("https://www.youtube.com/results?search_query=" + stringName)
    time.sleep(6)
    driver.find_element_by_xpath("//a[@id='video-title']").click()
    songLink = driver.current_url
    driver.get("https://ytbmp3.club/")
    driver.find_element_by_id("dlURL").send_keys(songLink,Keys.RETURN)


    driver.find_element_by_xpath("//iframe[@class='embed-responsive-item']").click()
    time.sleep(10)
    wait = True
    while (wait == True):
        for fname in os.listdir('C:\\Users\\sdf\\Desktop\\pruebatelgspo'):
            if ('.crdownload') in fname:
                print('downloading files ...')
                time.sleep(10)
            else:
                wait = False
    print('finished downloading all files ...')

解决方法

while (wait == True):
    for fname in os.listdir('C:\\Users\\sdf\\Desktop\\pruebatelgspo'):
        if ('.crdownload') in fname:
            print('downloading files ...')
            time.sleep(10)
        else:
            wait = False

这是麻烦制造者部分:

您首先设置 wait = True 并启动 while 循环以继续 if wait == True。现在,您查看给定目录中的所有文件名,并一一检查名称中是否包含 .crdownload。 现在出现问题:您的脚本第一次通过 else 部分运行时 wait 被设置为 False,这将导致 while 语句未完成并因此取消。

因此,即使目录中仍然存在带有 .crdownload 的文件,也会留下 while 循环,只是因为您“通过”了 else 块。


解决此问题的建议:

while wait == True:
    if any('.crdownload' in n for n in os.listdir('C:\\Users\\sdf\\Desktop\\pruebatelgspo'):
    continue
else:
    break

您也可以将 break 替换为 wait = False,具体取决于哪种语法更适合您正在编写的软件中的未来需求。