gpt4 book ai didi

javascript - 如何在Nightmare操作evaluate_now中使用等待函数?

转载 作者:行者123 更新时间:2023-12-03 03:25:38 26 4
gpt4 key购买 nike

我在脚本中使用 Nightmare 操作。在我使用evaluate_now函数的操作中,如何在其中使用wait函数?我知道我可以通过调用 this.wait('example')
在操作中使用等待函数但在 this.evaluate_now 函数内部无法访问 wait 函数。

Nightmare.action('example', function(done){
this.evaluate_now(function() {
//do some calculation and get element id
var element = 'calculatedelement';
activeTask.querySelector(element ).click();
//I have to use the wait function here
}
this.wait('body'); //wait is accessible here
});

最佳答案

您不能在evaluate_now() 中使用操作,而wait() 是库中的操作( Source )。 evaluate_now() 中提供的代码在电子实例 ( Source ) 中执行。

除此之外,您还可以通过在evaluate_now()的回调函数中使用setTimeout()函数来创建等待。下一个示例是检查元素在视口(viewport)中是否可见的操作。

Nightmare.action('waitInViewport', function (selector, done) {
// Keep evaluation function in a variable
const evalFn = () => {
this.evaluate_now((selector) => {
const element = document.querySelector(selector);

if (!element) {
return false;
}

const rect = element.getBoundingClientRect();

const height = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
const width = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);

return !(rect.top >= height || rect.bottom <= 0 ||
rect.left >= width || rect.right <= 0);
}, (err, isVisible) => {
if (err) {
return done(err);
}
if (isVisible) {
return done(null, isVisible);
}

// If we are here, so we didn't found the element, so just run another evaluation after a delay
setTimeout(evalFn, 500);
}, selector);
};

// Don't forget to do the first call of the evaluation
evalFn();
});

另一种方法是在调用自定义操作之前调用 wait() 函数。

Nightmare
.wait('#myComponent')
.example();

请记住,evaluate_now() 的自定义操作仅限于执行一些同步指令,并且可能不适合您的用例。

关于javascript - 如何在Nightmare操作evaluate_now中使用等待函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46345506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com