Nodejs phantomjs-node 示例出问题
Nodejs phantomjs-node 示例出问题
phantom stderr: execvp(): Too many levels of symbolic links
var phantom=require(‘phantom’);
exports.testPhantomCreatePage=function(beforeExit,assert) {
phantom.create(function(err,ph) {
ph.createPage(function(page){
page.open("http://www.google.com",function(status){
console.log("opened google? ",status);
});
var result=page.evaluate(function(){
return document.title;
});
console.log(result);
});
ph.exit();
});
};
有木有出现这种情况的???后台只有上面的一句话
当然可以。你遇到的问题可能与 phantomjs-node
的安装或配置有关。具体来说,错误信息 “execvp(): Too many levels of symbolic links” 表明在执行 PhantomJS 进程时遇到了符号链接层级过多的问题。这通常是由于环境变量或路径配置不当引起的。
解决方案
-
确保正确安装 PhantomJS: 确保你已经正确安装了 PhantomJS,并且版本兼容。你可以尝试重新安装 PhantomJS。
-
检查环境变量: 检查你的系统环境变量,确保没有循环引用的符号链接。你可以通过以下命令查看环境变量:
echo $PATH
-
使用绝对路径: 使用 PhantomJS 的绝对路径来运行它,以避免环境变量问题。
示例代码
下面是修正后的代码示例:
var phantom = require('phantom');
exports.testPhantomCreatePage = function(beforeExit, assert) {
phantom.create(function(err, ph) {
if (err) {
console.error('Failed to create phantom instance:', err);
return;
}
ph.createPage(function(page) {
if (!page) {
console.error('Failed to create page');
ph.exit();
return;
}
page.open("http://www.google.com", function(status) {
console.log("Opened Google? ", status);
page.evaluate(function() {
return document.title;
}, function(result) {
console.log("Title:", result);
ph.exit();
});
});
});
});
};
关键点解释
-
错误处理:
- 在创建 PhantomJS 实例时添加错误处理。
- 在创建页面时也添加错误处理,确保在出现问题时能够及时退出。
-
异步回调:
page.evaluate
是一个异步操作,需要使用回调函数来处理结果。
-
关闭进程:
- 确保在完成所有操作后调用
ph.exit()
来关闭 PhantomJS 进程。
- 确保在完成所有操作后调用
通过这些修改,你应该能够避免之前的问题并正常运行 PhantomJS 脚本。如果问题仍然存在,请检查系统环境变量和路径配置。
顶起来啊。。。我只是想用nodejs调用下phantomjs,用子进程调用,还是上面的那个错误。。。。
Try this
var phantom = require('phantom');
var testPhantomCreatePage = exports.testPhantomCreatePage = function(beforeExit, assert) {
phantom.create(function(ph) {
ph.createPage(function(page){
page.open(“http://www.google.com”,function(status) {
console.log("opened google? ",status);
page.evaluate((function(){
return document.title;
}), function(result) {
console.log(result);
ph.exit();
});
});
});
});
};
testPhantomCreatePage();
把上面代码保存为test.js ,然后node test.js 结果相同。。还是错误, stderr: execvp(): Too many levels of symbolic links
windows 平台也出现同样的错误,怎么解决啊!
把phantomjs-2.0.0-windows\bin 加到PATH路径了,然后运行 casperjs test.js 结果提示 CasperJS needs PhantomJS v1.x
根据你的描述,错误信息为 execvp(): Too many levels of symbolic links
,这通常意味着 PhantomJS 可执行文件的路径中存在循环链接(symbolic link)。你可以通过检查环境变量和路径配置来解决这个问题。
以下是一个改进的示例代码,并包含了一些错误处理:
var phantom = require('phantom');
exports.testPhantomCreatePage = function (beforeExit, assert) {
phantom.create(function (err, ph) {
if (err) {
console.error('Unable to create Phantom instance', err);
return;
}
ph.createPage(function (page) {
if (!page) {
console.error('Unable to create page');
ph.exit();
return;
}
page.open("http://www.google.com", function (status) {
if (status !== 'success') {
console.error('Failed to open Google:', status);
} else {
console.log('Opened Google:', status);
}
page.evaluate(function () {
return document.title;
}, function (result) {
console.log('Page title:', result);
ph.exit();
});
});
});
});
};
解释
-
错误处理:添加了更多的错误处理逻辑来捕获和报告错误。例如,在创建 PhantomJS 实例或页面时,如果发生错误,则会打印错误信息并提前退出。
-
异步回调:在
page.evaluate
方法的第二个回调函数中处理结果。这样可以确保在执行ph.exit()
之前已经得到了document.title
的值。 -
路径检查:确保你的 PhantomJS 可执行文件的路径正确且没有循环链接。可以在命令行中运行
which phantomjs
来检查当前使用的 PhantomJS 是否有路径问题。
如果你仍然遇到 Too many levels of symbolic links
错误,请检查你的系统环境变量(如 PATH
)中是否存在多个指向相同文件的循环链接。