【发布时间】:2016-05-21 04:17:06
【问题描述】:
我正在使用 Nightmare.js (v2.3.3) 来自动化我必须访问更新我们数据库的网站的部分工作流程。我已经能够让 Nightmare 为 .type、.click 和 .screenshot 等基本内容工作,以验证我正在访问这些页面并输入我想要的信息。
我被卡住了,并且似乎缺少文档,正在使用.evaluate 从页面中提取信息。在文档中它是这样的:
.evaluate(fn [,arg1,arg2,...])
var selector = 'h1';
var text = yield nightmare
.evaluate(function (selector) {
// now we're executing inside the browser scope.
return document.querySelector(selector).innerText;
}, selector); // <-- that's how you pass parameters from Node scope to browser scope
这一切都很好,但实际上是否可以反过来将信息从浏览器范围传递到节点范围?我想做的是将页面上的所有复选框作为数组返回,然后在 Nightmare 脚本中循环遍历它们。
我还搜索了许多 GitHub 问题和 StackOverflow 问题以找到答案,问题似乎是以前的版本是基于 PhantomJS 构建的,而 v2+ 使用的是 Electron,因此很难区分哪些答案实际上仍然适用于当前版本。 Here 是一个对我来说似乎有意义的答案,但那是在 2014 年,所以我认为它很可能是 PhantomJS 版本。作为参考,这是似乎对如何从浏览器转移到节点范围有答案的 sn-p:
var p1=1,
p2 = 2;
nightmare
.evaluate( function(param1, param2){
//now we're executing inside the browser scope.
return param1 + param2;
}, function(result){
// now we're inside Node scope again
console.log( result);
}, p1, p2 // <-- that's how you pass parameters from Node scope to browser scope
) //end evaluate
.run();
但是现在的Nightmare版本好像不支持这种.evaluate(fn, cb, arg1, arg2,...)格式?
在我发疯之前,我只想知道这是否可能!感谢您的所有帮助,如果您需要任何其他信息来帮助回答,请告诉我。
【问题讨论】:
-
我不明白。在您的第一个 sn-p
text中应该包含从页面上下文传递到节点上下文的值,不是吗?是吗? -
@ArtjomB。不是我的理解。
yield nightmare正在启动噩梦实例以遵循指令链。
标签: node.js electron nightmare