假设的重复问题的答案确实解决了如何将参数传递给函数的问题,但如果您实际上已经阅读了问题,那么您会看到它最初是关于脚本挂起的。
我是PhantomJS的新手,只是知道足够的javascript弄得一团糟。
这是我的剧本......
"use strict";
var page = require('webpage').create();
page.onConsoleMessage = function(msg) { console.log(msg); };
page.open("https://developer.amazon.com/home.html", function(status) {
if (status === "success") {
console.log("SUCCESS");
var title = page.evaluate(function() { return document.title;});
console.log( title );
var forms = page.evaluate(function() { return document.forms;});
console.log( forms.length );
var num_elements = page.evaluate(function() {return document.forms[0].elements.length;});
console.log( num_elements );
// for each ( var e in document.forms[0].elements ) {
// console.log( "e.name = [" + e.name + " e.value = [" + e.value + "]" );
// }
for ( var i=0; i < document.forms[0].elements.length; i++ ) {
console.log( "name = [" + document.forms[0].elements[i].name + "]" );
}
} else {
phantom.exit(1);
}
phantom.exit(0);
});
当我运行它时,我得到了这个输出,然后脚本似乎挂起了:
SUCCESS
Amazon.com Sign In
1
18
我认为我没有任何拼写错误,也不明白为什么我的循环无效。
由于
更新
感谢Deryck的帮助我将脚本修改为:
"use strict";
var page = require('webpage').create();
page.onConsoleMessage = function(msg) { console.log(msg); };
page.open("https://developer.amazon.com/home.html", function(status) {
if (status === "success") {
console.log("SUCCESS");
var title = page.evaluate(function() { return document.title;});
console.log( title );
var forms = page.evaluate(function() { return document.forms;});
console.log( forms.length );
var num_elements = page.evaluate(function() {return document.forms[0].elements.length;});
console.log( num_elements );
// for each ( var e in document.forms[0].elements ) {
// console.log( "e.name = [" + e.name + " e.value = [" + e.value + "]" );
// }
for ( var i=0; i < num_elements; i++ ) {
console.log( i );
console.log( "name = [" +
page.evaluate(
function() {
return document.forms[0].elements[i].name
}
)
+ "]" );
}
} else {
phantom.exit(1);
}
phantom.exit(0);
});
但是我收到了这个错误...
SUCCESS
Amazon.com Sign In
1
18
0
ReferenceError: Can't find variable: i
undefined:2
:3
name = [null]
答案 0 :(得分:1)
传递给page.evaluate
的函数将无法访问幻像脚本中存在的变量;这是因为函数代码被传递给页面,然后评估。
使用此page.evaluate
形式传递i
:
console.log( "name = [" +
page.evaluate(function(i) {
return document.forms[0].elements[i].name;
}, i)
+ "]");