尝试使用Greasemonkey在浏览器中自动执行任务。
要求:加载一个网页,其中包含一个显示340多个结果中的15个的表格,其中包含按钮控件以查看下一页的结果,返回,结束等等。
无法展示图片,因为它是一个企业应用程序。
到目前为止,如果我使用setTimeouts循环,超时排队并在我想的同时执行。相反,要求是代码运行信息收集,单击下一步,等待,然后再次收集信息。
答案 0 :(得分:0)
您可以尝试一个实用程序函数waitForKeyElement,一个greasemonkey实用程序脚本。它基本上是在做你以前想做的事情。它设置超时以连续检查是否加载了元素。执行它看起来像这样:
waitForKeyElements (
"div.comments",
commentCallbackFunction
);
评论回调函数将是收集结果的函数。
这也有助于理解为什么循环中的setTimeout不起作用。 setTimeout不会阻止执行脚本来运行回调函数。它将要执行的函数排队,而不是作为第二个参数传入的时间。因此,循环运行非常快,而不是在3000ms, 6000ms, and 9000ms...
进行函数调用,因为您可能会在3000ms, 3001ms, 3002ms
处获得更接近函数调用的内容。
答案 1 :(得分:0)
您可以通过同步执行程序nsynjs执行与API调用,递归和超时顺序混合的任意JS逻辑:
function synchronousCode() {
var i=0;
while(true) {
console.log("waiting 1 sec, iteration", i++);
$('#myDiv').toggle();
nsynWait(nsynjsCtx,1000);
};
}
var ctx;
function btnStopClicked() {
ctx.stop();
ctx=null;
}
function btnStartClicked() {
ctx=nsynjs.run(synchronousCode,{},function(){
console.log("Synchronous Code done");
});
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="https://rawgit.com/amaksr/nsynjs/master/nsynjs.js"></script>
<script src="https://rawgit.com/amaksr/nsynjs/master/wrappers/nsynWait.js"></script>
<body>
<button id="buttonStart" onclick="btnStartClicked()">Start</button>
<button id="buttonStop" onclick="btnStopClicked()">Stop</button>
<div id="myDiv">Flashing div</div>
</body>
&#13;
点击此处查看更多示例:https://github.com/amaksr/nsynjs/tree/master/examples
答案 2 :(得分:0)
感谢大家,发现这篇文章是最好的答案 Synchronous setTimeout + Loop
这样加载页面,读取第一个值,单击下一个按钮,显示下一个结果并读取,直到最后一页。
再次感谢您的意见和建议
答案 3 :(得分:0)
您可以使用它
for(const elment of arrayElements) {
await yourFunc(elment)
await yourOtherFunc('somePatameter')
}