微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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,具体取决于哪种语法更适合您正在编写的软件中的未来需求。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。