【发布时间】:2017-01-09 14:24:20
【问题描述】:
我正在尝试使用 nightmarejs 构建一个脚本,该脚本可以一遍又一遍地单击一个按钮,例如 cmets 部分底部的那个 youtube 按钮,每次按下它时都会加载较旧的 cmets(例如:youtube .com/watch?v=pZISJqJbQuU&list=RDpZISJqJbQuU#t=3) 并在没有更多按钮可点击时停止。
我试过调用评估,只是为了首先调用 end() 方法并取消进程。我尝试使用 setTimeout 、 setInterval 和 then() 将循环转换为递归。每次由于 end() 的竞争条件,evaluate() 将完成它的工作但不退出(只是挂起)或在完成工作之前退出。
那里有经验丰富的 nightmarejs 用户吗?
function youtube_button_clicker(group) {
var nightmare = Nightmare({
show: true
});
nightmare
.goto(url)
.inject('js', 'jquery-3.1.0.js')
.then(
() => nightmare.
evaluate(function() {
for (i=0;i>LEN;i++)
{ setTimeout(() => { $(button_element).click() }, i * 2000); }
return "done"
}))
.catch(function (error) {
console.error('Search failed:', error);
});
}
删除 .end() 方法并挂起,再次放回 .end() 并跳过该过程 - 提前退出。我能做什么?
【问题讨论】:
-
你的
setTimeouts需要被包裹在 Promise 中,然后你需要promise.all它们,这样你会在所有完成后得到一个事件,然后你需要将all返回的 Promise 传递给 @987654325 @ 以便您可以将其与另一个then或end正确链接 -
你能给我看一个代码示例吗?
标签: javascript node.js phantomjs browser-automation nightmare