我需要模拟点击按钮,直到它消失。我使用PhantomJS来做这件事。
如果此代码正常运行,则 numbSongs
应该不同。如果我在示例中使用return false
,则它不起作用(必要条件永远不会匹配)。如果我将其更改为true
它可以正常工作,但numbSongs
是相同的。
这是PhantomJS官方例子中的waitFor函数代码:
"use strict";
function waitFor(testFx, onReady, timeOutMillis) {
var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 3000, //< Default Max Timout is 3s
start = new Date().getTime(),
condition = false,
interval = setInterval(function() {
if ( (new Date().getTime() - start < maxtimeOutMillis) && !condition ) {
// If not time-out yet and condition not yet fulfilled
condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code
} else {
if(!condition) {
// If condition still not fulfilled (timeout but condition is 'false')
console.log("'waitFor()' timeout");
phantom.exit(1);
} else {
// Condition fulfilled (timeout and/or condition is 'true')
console.log("'waitFor()' finished in " + (new Date().getTime() - start) + "ms.");
typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it's supposed to do once the condition is fulfilled
clearInterval(interval); //< Stop this interval
}
}
}, 250); //< repeat check every 250ms
};
我不确定是否等待条件问题或模拟点击按钮时出现问题。
UPD:
我尝试使用此代码检查页面上是否有按钮。我期望从这段代码做:点击按钮,等待一段时间,如果按钮处于活动状态则再次单击并继续按钮直到按钮消失。然后应该有一个日志Button disappears
。我的代码错在哪里?
waitFor(function(){
return page.evaluate(function(){
var buttonMore = $("button.example");
buttonMore.click();
if (buttonMore.length > 0){
return false;
} else {
return true;
}
});
}, function(){
console.log("Button disappears");
phantom.exit();
});
解决
问题在于我需要将clicking(buttonMore[0]);
放在if
内。