gpt4 book ai didi

javascript - 为什么我的 PhantomJS 脚本挂起?

转载 作者:行者123 更新时间:2023-12-03 06:43:29 24 4
gpt4 key购买 nike

假设的重复问题的答案确实解决了如何将参数传递给函数,但如果您实际阅读了该问题,您会发现它最初是关于脚本挂起的。

我是 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]

最佳答案

您传递给page.evaluate的函数将无法访问幻像脚本中存在的变量;这是因为函数代码被传递到页面,然后进行计算。

使用这种形式的page.evaluate来传递i:

console.log( "name = [" +
page.evaluate(function(i) {
return document.forms[0].elements[i].name;
}, i)
+ "]");

关于javascript - 为什么我的 PhantomJS 脚本挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37848561/

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