我想知道我是否可以从谷歌单词发音中下载所有音频文件
我提出了一个实际可行的解决方案
我创建了一个包含以下代码的html页面
<a id="mylink" href='//ssl.gstatic.com/dictionary/static/sounds/de/0/word.mp3' download='word.mp3'>download audio "word"</a>
现在,如果您单击上面的链接,浏览器将开始下载音频文件 如果你将word.mp3更改为其他内容并再次单击它, 它将开始下载新单词;
问题是我试图以mp3格式下载整个字典。
所以我想出了以下javascript
var words=['cat','fish','police','office','ball'];//the whole dictioany.....
for(var z in words )
setTimeout(function(){
var lin=document.querySelector("a");//gets the above link
lin.href="//ssl.gstatic.com/dictionary/static/sounds/de/0/"+a[z]+".mp3";//changes link href to each of the array "words"
lin.download=a[z]+".mp3";//changes the file name to current word
lin.click();//after clicking this link , all downloads start at the same time
},1000)//even it setup to fire after 1 second
//all the downloads start at same time
最大的问题是只下载的音频文件是最后一个&#34; ball&#34;
并且已多次下载 任何解决方案都表示赞赏,并提前感谢
这是关于jsfiddle click
的示例答案 0 :(得分:0)
您不能在循环中使用setTimeout()
,因为循环执行速度会超过超时。因此,将为循环中的每个事件运行最终结果(a[z]
将调用a[4]
五次)。要解决这个问题,您需要稍微修改for
循环,而不是使用超时:
var a = ['cat', 'fish', 'police', 'office', 'ball'];
for (var z = 0; z < a.length; z++) {
var l = document.querySelector("a");
l.href = "//ssl.gstatic.com/dictionary/static/sounds/de/0/" + a[z] + ".mp3";
l.download = a[z] + ".mp3";
l.click();
}
我创建了一个更新的小提琴,展示了这个here。
希望这有帮助!
答案 1 :(得分:0)
您的代码存在以下问题:
minutes= raw_input('Enter the number of minutes: ')
def minutes_to_years_days(minutes):
ydec=minutes/60/24/365
y=int(ydec)
ddec=(minutes-y*365*24*60)/60/24
d=int(ddec)
sentence= '{} is approximately {} years and {} days.'.format(minutes,y,d)
print minutes_to_years_days()
几乎在同一时间内在循环内执行。这就是为什么函数也同时执行的原因。想想有10个鸡蛋计时器,你们都可以同时激活。他们也会同时响起。setTimeout
触发的函数使用函数外部声明的变量setTmeout
。它在执行z
时不使用z
的值,但在执行函数时不使用setTimeout
的值。该函数的所有实例都访问同一个变量,因此它们在最后一个循环中都使用z
的值。不是使用循环,而是使用setInterval
以给定间隔执行函数并使用counter
变量,以便在每次执行函数时使用不同的变量。
function run()
{
var words=['cat','fish','police','office','ball'];
var counter = 0;
// Setup IntervalFunction to run every 2 seconds
var interval = setInterval(IntervalFunction, 2000);
function IntervalFunction()
{
// Download word
downloadWord(words[counter]);
// Increase counter
counter++;
// When counter is beyond array, stop IntervalFunction from running
if(counter >= words.length)
{
clearInterval(interval);
}
}
}
function downloadWord(word)
{
var lin = document.querySelector("a");
lin.href = "https://ssl.gstatic.com/dictionary/static/sounds/de/0/" + word + ".mp3";
lin.download = word + ".mp3";
lin.click();
}