问题描述
我正在编写一个脚本来将一些 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
,具体取决于哪种语法更适合您正在编写的软件中的未来需求。