35

node.jsでCasperJSを使いたいです。

node.js で CasperJS を使用するには、次の URL を参照しました。

上記の URL の助けを借りて、次のコードを作成しました。

//DISPLAY=:0 node test2.js
var phantom = require('phantom');
console.log('Hello, world!');
phantom.create(function (ph) {
    ph.casperPath = '/opt/libs/casperjs'
    ph.injectJs('/opt/libs/casperjs/bin/bootstrap.js');
    var casper = require('casper').create();
    casper.start('http://google.fr/');

    casper.thenEvaluate(function (term) {
        document.querySelector('input[name="q"]').setAttribute('value', term);
        document.querySelector('form[name="f"]').submit();
    }, {
        term: 'CasperJS'
    });

    casper.then(function () {
        // Click on 1st result link
        this.click('h3.r a');
    });

    casper.then(function () {
        console.log('clicked ok, new location is ' + this.getCurrentUrl());
    });

    casper.run();
});

このコードを実行すると、次のエラーが発生しました。

エラー メッセージ:

tz@tz-ubuntu:/opt/workspaces/TestPhantomjs$ DISPLAY=:0 node test2.js 
Hello, world!
Error: Cannot find module 'casper'
    at Function._resolveFilename (module.js:332:11)
    at Function._load (module.js:279:25)
    at Module.require (module.js:354:17)
    at require (module.js:370:17)
    at /opt/workspaces/TestPhantomjs/test2.js:6:14
    at Object.<anonymous> (/opt/workspaces/TestPhantomjs/node_modules/phantom/phantom.js:82:43)
    at EventEmitter.<anonymous> (/opt/workspaces/TestPhantomjs/node_modules/phantom/node_modules/dnode/index.js:215:30)
    at EventEmitter.emit (events.js:67:17)
    at handleMethods (/opt/workspaces/TestPhantomjs/node_modules/phantom/node_modules/dnode-protocol/index.js:138:14)
    at EventEmitter.handle (/opt/workspaces/TestPhantomjs/node_modules/phantom/node_modules/dnode-protocol/index.js:98:13)
phantom stdout: Unable to load casper environment: Error: Failed to resolve module fs, tried fs
4

6 に答える 6

25

SpookyJS を使用して Node.js からCasperJSを駆動できます。

于 2012-10-04T06:23:20.497 に答える
21

https://groups.google.com/group/casperjs/browse_thread/thread/641e9e6dff50fb0a/e67aaef5ab4ec918?hl=zh-CN#e67aaef5ab4ec918

Nicolas Perriault
2012/2/27 天猪 蓝虫。:

nodejsでcasperjsを使いたいです。および参照先: https://github.com/sgentle/phantomjs-nodeおよび http://casperjs.org/index.html#faq-executable

そのように CasperJS を実行することはできません。QtWebKit と V8 は同じ js 環境 (およびイベント ループ) を共有しないため、node.js アプリは CasperJS モジュールを読み込んで使用できません。この githubのようなサブプロセス呼び出しを使用して、CasperJS スクリプトを個別に実行する必要があります 。CasperJS を phantomjs-node と互換性を持たせる予定はありません alert()。これは、簡単ではないベースのダーティ ハックを使用するためです。

乾杯、 -- Nicolas Perriault

于 2012-02-28T17:16:14.780 に答える
17

CasperJS には、外部と通信するための Web サーバーが含まれています。ノード ( などを使用) はrequestsuperagentHTTP 経由で casper と通信できるようになりました。

scraper.js

#!/usr/bin/env casperjs

// I AM NOT NODEJS
// I AM CASPER JS
// I RUN IN QTWEBKIT, NOT V8

var casper = require('casper').create();
var server = require('webserver').create();
var ipAndPort = '127.0.0.1:8585';

server.listen(ipAndPort, function(request, response) {

    casper.start('https://connect.data.com/login');
    casper.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36");
    casper.then(function(){
        // lots of code here, and a few more cassper.then()s
    });

    casper.run(function(){
        console.log('\n\nFinished')
        response.statusCode = 200;
        var body = JSON.stringify({
            phoneNumber: '1800-YOLO-SWAG'
        })

        response.write(body);
        response.close();
    });
});

scraper.jsWeb サーバーとして実行できるようになりました。

chmod +x scraper.js
./scraper.js

node app の場合と同様に、Linux サービスとして実行する必要があります。

于 2013-05-14T21:57:30.300 に答える
0

これは基本的に、スクリプトが Casper を見つけられないことを意味します。パスを確認しましたか

/opt/libs/casperjs 

と:

/opt/libs/casperjs/bin/bootstrap.js

ウェブサイトのユーザーがアクセスできますか? 場所を考えると、おそらくそうではありません。/opt は UNIX パスですが、Web サイトは {websiterootpath}/opt を検索します。

あなたのウェブサイトのルートフォルダーにサブフォルダー「casperjs」を作成し、その内容をコピーします

/opt/libs/casperjs 

そこへ。次に、パスを次から変更します

/opt/libs/casperjs

/casperjs
于 2012-02-27T01:48:06.357 に答える