gpt4 book ai didi

node.js - SpookyJS 中的全局变量和外部函数

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:18 26 4
gpt4 key购买 nike

我是 SpookyJS/CasperJS 的新手,我正在尝试弄清楚执行流程。

这就是我要实现的目标:

  • 加载页面

  • 存储页面的图像

  • 将这张图片传递给一个函数并执行它(这个过程相当长:~15 秒)

  • 等待函数返回结果

  • 使用返回值填充加载页面的表单中的字段

  • 提交表格

这是一个代码片段,试图解释我想出的解决方案:

var globProcessedImage;

try {
var Spooky = require('spooky');
} catch (e) {
var Spooky = require('../lib/spooky');
}

var spooky = new Spooky({
child: {
transport: 'http'
},
casper: {
logLevel: 'debug',
verbose: true
}
}, function (err) {
if (err) {
e = new Error('Failed to initialize SpookyJS');
e.details = err;
throw e;
}

spooky.start('http://example.com/');

spooky.then(function() {
this.captureSelector('./image.png', '#img-node');
});

spooky.waitFor(function() {
this.emit('image.processed');
return globProcessedImage !== undefined;
}, function then() {
processedImage = globProcessedImage;
this.sendKeys('#imagePassword', processedImage);
});

spooky.then(function() {
this.capture('./page.png');
});

spooky.run();

spooky.on('image.processed', function() {
setTimeout(function() {
globProcessedImage = 'my_result_string';
}, 15000);
});
});

spooky.on('error', function (e, stack) {
console.error(e);

if (stack) {
console.log(stack);
}
});

spooky.on('log', function (log) {
if (log.space === 'remote') {
console.log(log.message.replace(/ \- .*/, ''));
}
});

当我运行应用程序时,我收到以下错误:

ReferenceError:找不到变量:globProcessedImage

如何使 globProcessedImage 在 SpookyJS 中可见?这是在 Web 自动化过程中处理外部函数的正确方法吗?

提前致谢。

最佳答案

编辑:在撰写本文时,SpookyJS 不支持将对象按值传递到 waitFor 回调的附加语法。所以这段代码不起作用。

与 casperjs 相比,spookyjs 具有三种可能的上下文:spooky 上下文、casper 上下文和页面上下文。

您尝试的是从 casper 上下文访问在 spooky 上下文中定义的变量。您可以按照本期所述在上下文之间传递变量:How to make global variables available to functions inside casper?

因此根据您的代码调整它,您应该:

var globProcessedImage;

try {
var Spooky = require('spooky');
} catch (e) {
var Spooky = require('../lib/spooky');
}

var spooky = new Spooky({
child: {
transport: 'http'
},
casper: {
logLevel: 'debug',
verbose: true
}
}, function (err) {
if (err) {
e = new Error('Failed to initialize SpookyJS');
e.details = err;
throw e;
}

spooky.start('http://example.com/');

spooky.then(function() {
this.captureSelector('./image.png', '#img-node');
// start longRunning here
});

spooky.waitFor([{spookyGlobProcessedImage: globProcessedImage}, function() {
return spookyGlobProcessedImage !== undefined;
}], [{spookyGlobProcessedImage: globProcessedImage}, function then() {
this.emit('image.processed', spookyGlobProcessedImage);
processedImage = spookyGlobProcessedImage;
this.sendKeys('#imagePassword', processedImage);
}]);

spooky.then(function() {
this.capture('./page.png');
});

spooky.run();

spooky.on('image.processed', function(spookyGlobProcessedImage) {
this.echo("spookyGlobProcessedImage is " + spookyGlobProcessedImage);
});
});

spooky.on('error', function (e, stack) {
console.error(e);

if (stack) {
console.log(stack);
}
});

spooky.on('log', function (log) {
if (log.space === 'remote') {
console.log(log.message.replace(/ \- .*/, ''));
}
});

我不确定 spooky.waitFor 是否支持这种语法。

关于node.js - SpookyJS 中的全局变量和外部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23682394/

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