- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在下面的代码中,我想调用checkMainBox(cthis)
。我想对其进行设置,以便该函数返回检索到的数字或返回 false。但在 checkMainBox()
中我不知道如何返回值。返回的数字未定义。我很确定由于异步行为我不能这样做,但是下一个最好的方法是什么?
function checkMainBox(cthis){
var number;
cthis.waitForSelector("._XWk", function(){
cthis.capture("result.png");
cthis.then(function(){
var number = cthis.evaluate(function(){
return $("._XWk").txt();
})
// console.log("number", number);
})
})
return number
}
function getPhoneNumber(cthis){
console.log("NUMBER::", checkMainBox(cthis));
//checkMainBox(cthis) should return false or the number
}
casper.on("error", function(msg){
this.echo("error: " + msg, "Error");
})
casper.on("page.error", function(msg, trace){
this.echo("Page Error: " + msg, "error");
});
casper.on("remote.message", function(message){
this.echo("Remote: " + message);
});
casper.start("http://google.com/", function(){
this.waitForSelector("form[action='/search']");
});
casper.then(function(){
this.fill("form[action='/search']", {q : "ebay.com phone number"}, true);
})
casper.then(function(){
getPhoneNumber(this)
})
casper.run();
编辑::
最近的尝试,但如果您有其他方法,请随时分享:
function checkMainBox(cthis){
var number;
return new Promise(function(resolve, reject){
cthis.waitForSelector("._XWk", function(){
cthis.capture("result.png");
cthis.then(function(){
var number = cthis.evaluate(function(){
return $("._XWk").txt();
})
resolve(number)
})
});
})
}
function getPhoneNumber(cthis){
checkMainBox(cthis).then(function(result){
console.log("NUMBER::", checkMainBox(result));
})
.catch(function(err){
if(err) console.log(err);
})
}
错误:错误:ReferenceError:找不到变量:Promise
编辑2:
function getPhoneNumber(cthis){
// var number;
cthis.waitForSelector("._XWk", function(){
cthis.capture("result.png");
cthis.then(function(){
var number = cthis.evaluate(function(){
return $("._XWk").html();
})
checkMainBox(number);
// console.log("number", number);
})
})
}
function checkMainBox (number){
// console.log("NUMBER::", number);
return number
}
...
casper.then(function(){
this.fill("form[action='/search']", {q : "ebay.com phone number"}, true);
})
casper.then(function(){
var number;
console.log(getPhoneNumber(this)) // should be the value
})
casper.run();
最佳答案
你可以使用穷人的 promise (重要的东西是粗体的):
function checkMainBox(cthis){
<b>var number = {};</b>
cthis.waitForSelector("._XWk", function(){
cthis.capture("result.png");
cthis.then(function(){
<b>number.value</b> = cthis.evaluate(function(){
return $("._XWk").txt();
})
})
})
<b>return number</b>
}
function getPhoneNumber(cthis){
var number = checkMainBox(cthis));
<b>cthis.then</b>(function(){
console.log("outer: " + <b>number.value</b>);
});
}
CasperJS已经提供了一个类似于Promises的环境,但是你仍然需要有一个可以异步接收值的空对象。 cthis.then
很重要,因为它处理等待,直到 checkMainBox
内部的 cthis.waitForSelector
完成。
关于javascript - casper 方法之后函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40967005/
docs strate你可以通过 options反对casperjs.create()包括要注入(inject)到客户端页面的 js clientScripts。 docs also state你不应
可以在 casper.evaluate() 中使用 casper 函数并在其中包含 jquery 代码吗?我需要以类似于 jquery 的方式迭代元素。 我正在加载 jquery.js 库 这是我的尝
我做了这个小测试: casper.test.begin('Test', function() { casper.start(); casper.then(function() { casper
我正在将 casper JS 数据保存到 CSV 文件中,但如何转义逗号才能使其不作为新列包含在 CSV 文件中? 例子 var data = "asdf, fff"; fs = require('f
我想做的是声明两个caspers,两个将登录到某个站点,一个充当管理员,另一个充当典型用户。我想在一个脚本中完成。 是否可以在一个脚本中声明两个或多个 casper?就像这个: var casper1
这是一个有点棘手的问题。 我非常熟悉 javascript,但是我在一个使用 PhantomJS 和 CasperJS 自动抓取网站的项目中。这些对我来说都是全新的主题。 我能够弄清楚如何使用 Cas
我试图弄清楚 Casper.js 到底是如何使用底层 Phantom.js 来移动 mouse 的。 。 我发现casper.page.sendEvent()是负责的,但是 sendEvent 定义在
在下面的代码中,我想调用checkMainBox(cthis)。我想对其进行设置,以便该函数返回检索到的数字或返回 false。但在 checkMainBox() 中我不知道如何返回值。返回的数字未定
我尝试使用以下程序等待 5 秒,然后再单击下一个链接。但我看到 casper.wait 根本不等待 5 秒。 我需要等待 5 秒,以便我想要抓取的 url 上的 ajax 代码有足够的时间加载。 va
我使用以下脚本来循环访问页面的选项以获取后续值: var casper = require('casper').create(); casper.on('remote.message', functi
使用 CasperJS 1.1 和以下代码,我可以从网页中获取有用的 DOM html。 casper.each(c.getElementsInfo(xpath), function(casper,
我有一些 HTML Lane 1 Uncounted Count 我能够计算行数 casper.test.assertElementCount('[data-automat
我为我们的应用程序开发了 CasperJS 脚本。有时它工作得很好,但有时却达不到我们的预期。 你能帮我一下吗?我可以在哪里改进我的脚本来实现它? 请找到下面的脚本。 casper.test.comm
我制作了一个快速脚本来从 Reddit 帖子列表中捕获屏幕截图。该脚本从 json 文件中获取 reddit url(示例如下所示),然后访问每个页面以捕获屏幕截图。 该脚本对于大多数人来说效果都很好
我一直在使用开源数据集提供程序 Casper 来实现 Java 中数据库对象集合的内存表示。 Github 存储库:https://github.com/casperds/casperdatasets
有没有什么办法可以使用casper.js登录页面然后显示页面?我可以截屏,我希望它是实际页面。 到目前为止,这是我所拥有的,尽管我确信这是非常错误的: var casper = require('ca
向函数添加 this.echo 命令会导致在设置链接之前调用 casper.run 方法 var casper = require('casper').create(); function getLi
是否可以将函数传递给 casper.evaluate() var casper = require('casper').create({ //verbose: true, logLev
我想在我的脚本中多次调用 casper.start()。 我试过: var ids = [1,6,13]; ids.forEach(function(id) { casper.start('h
我需要将测试结果存储在任何存储器中。但不幸的是,它在任何时候引发异常“CasperError:找不到模块网络”时都不适用于任何数据库驱动程序: var require = patchRequire(r
我是一名优秀的程序员,十分优秀!