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();

});

};

有木有出现这种情况的???后台只有上面的一句话


7 回复

当然可以。你遇到的问题可能与 phantomjs-node 的安装或配置有关。具体来说,错误信息 “execvp(): Too many levels of symbolic links” 表明在执行 PhantomJS 进程时遇到了符号链接层级过多的问题。这通常是由于环境变量或路径配置不当引起的。

解决方案

  1. 确保正确安装 PhantomJS: 确保你已经正确安装了 PhantomJS,并且版本兼容。你可以尝试重新安装 PhantomJS。

  2. 检查环境变量: 检查你的系统环境变量,确保没有循环引用的符号链接。你可以通过以下命令查看环境变量:

    echo $PATH
    
  3. 使用绝对路径: 使用 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();
                });
            });
        });
    });
};

关键点解释

  1. 错误处理

    • 在创建 PhantomJS 实例时添加错误处理。
    • 在创建页面时也添加错误处理,确保在出现问题时能够及时退出。
  2. 异步回调

    • page.evaluate 是一个异步操作,需要使用回调函数来处理结果。
  3. 关闭进程

    • 确保在完成所有操作后调用 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();
                });
            });
        });
    });
};

解释

  1. 错误处理:添加了更多的错误处理逻辑来捕获和报告错误。例如,在创建 PhantomJS 实例或页面时,如果发生错误,则会打印错误信息并提前退出。

  2. 异步回调:在 page.evaluate 方法的第二个回调函数中处理结果。这样可以确保在执行 ph.exit() 之前已经得到了 document.title 的值。

  3. 路径检查:确保你的 PhantomJS 可执行文件的路径正确且没有循环链接。可以在命令行中运行 which phantomjs 来检查当前使用的 PhantomJS 是否有路径问题。

如果你仍然遇到 Too many levels of symbolic links 错误,请检查你的系统环境变量(如 PATH)中是否存在多个指向相同文件的循环链接。

回到顶部