كيفية استخدام كاسبيرجس في العقدة.شبيبة?
سؤال
وأود أن استخدام كاسبيرجس في عقدة.شبيبة.
لقد أشرت إلى عنوان ورل التالي لاستخدام كاسبيرجس في العقدة.شبيبة:
مع مساعدة من عناوين المواقع أعلاه كنت قد كتبت التعليمات البرمجية التالية:
//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
المحلول 2
نيكولاس بيريولت
2012/2/27 天猪 蓝虫.:
أنا وان لاستخدام كاسبيرجس في نوديجس.و الحكام إلى: https://github.com/sgentle/phantomjs-node و http://casperjs.org/index.html#faq-executable
لا يمكنك تشغيل كاسبيرج بهذه الطريقة;كيوبكيت و في 8 لا يشتركان في نفس الشيء بيئة شبيبة (وحلقة الحدث) ، لذلك عقدة الخاص بك.سوف شبيبة التطبيق لن تكون قادرة على تحميل واستخدام وحدة كاسبيرجس.لديك لتشغيل البرنامج النصي كاسبيرجس الخاص بك بشكل منفصل باستخدام استدعاء عملية فرعية, مثل هذا واحد على جيثب.I لا تخطط لجعل كاسبيرجس متوافقة مع فانتومجس عقدة لأنه الاستخدامات
alert()
- المأجورون القذرة مقرها أنا لست سهلة مع.في صحتك, -- نيكولاس بيريولت
نصائح أخرى
يمكنك استخدام spookyjs لدفع casperjs من العقدة.
كاسبيرجس يتضمن خادم ويب للتحدث إلى العالم الخارجي.عقدة (باستخدام request
, superagent
الخ) يمكن الآن التحدث إلى كاسبر عبر هتب.
في 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.js
كخادم ويب:
chmod +x scraper.js
./scraper.js
حل واحد (الذي عمل بالنسبة لي) هو البدء وإيقاف الخادم الخاص بك على أساس لكل اختبار.على سبيل المثال، لدي GuardaceticeTagCode التي تبدو: giveacodicetagpre.
واختبارات Casperjs الخاصة بي في runtests.coffee
تبدو وكأنها:
giveacodicetagpre.
يعني أساسا أن البرنامج النصي الخاص بك لا يمكن العثور على كاسبر؛هل راجعت المسار وتأكد من giveacodicetagpre.
و: giveacodicetagpre. يمكن الوصول إلى
من قبل مستخدم موقع الويب؟النظر في الموقع ربما غير المرجح. / POLT هو مسار UNIX، ولكن الموقع سوف يبحث في {websiterootpath} / opt.
قمت بإنشاء مجلد فرعي "Casperjs" في المجلد الجذر لموقع الويب الخاص بك ونسخ محتويات giveacodicetagpre.
إلى هناك. ثم قم بتغيير مساراتك من giveacodicetagpre.
إلى giveacodicetagpre.
حاولت تشغيل كاسبر بواسطة وظيفة عقدة كرون أيضا، ها هو الحل الخاص بي
في casper.js صدى ردكم: giveacodicetagpre.
استخدم Node-cmd في ملف العقدة Casper_Wrapper.js: giveacodicetagpre.