我来这里是想知道怎么做,但找不到。所以我自己做了。
此函数用于按顺序运行循环(感谢 Ivo Wetzel 的回答 here):
function asyncLoop(iterations, func, callback) {
var index = 0;
var done = false;
var loop = {
next: function() {
if (done) {
return;
}
if (index < iterations) {
index++;
func(loop);
} else {
done = true;
callback();
}
},
iteration: function() {
return index - 1;
},
break: function() {
done = true;
callback();
}
};
loop.next();
return loop;
}
另一个是在链接中模拟点击(不记得我在哪里看到的):
function hacerClic(obj, callback) {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var canceled = !obj.dispatchEvent(evt);
callback();
}
最后,我们为 asyncLoop 运行了两次,一次用于扩展答案:
var verRespuestas = document.getElementsByClassName("UFIReplySocialSentenceLinkText");
var i = 0;
asyncLoop(verRespuestas.length, function(loop) {
hacerClic(verRespuestas[i], function(result) {
loop.next();
i++;
})
}, function() {});
以及其他扩大“查看更多”:
var verMas = document.getElementsByClassName("_5v47");
var j = 0;
asyncLoop(verMas.length, function(loop) {
hacerClic(verMas[j], function(result) {
loop.next();
j++;
})
}, function() {});
注意:如果“查看更多”循环出错可能是因为 DOM 尚未完全加载。