Я хотел бы использовать phantomjs в моем скрипте node.js. есть phantomjs-node библиотека .. но, к сожалению, автор использовал этот странный код кофе сценарий, чтобы объяснить, что он делает:Может ли phantomjs работать с node.js?
phantom = require 'phantom'
phantom.create (ph) ->
ph.createPage (page) ->
page.open "http://www.google.com", (status) ->
console.log "opened google? ", status
page.evaluate (-> document.title), (result) ->
console.log 'Page title is ' + result
ph.exit()
теперь, если бы я использовал phantomjs непосредственно JavaScript, это будет выглядеть как this:
var page = require('webpage').create();
page.open(url, function (status) {
var title = page.evaluate(function() {
return document.title;
});
console.log('Page title is ' + title);
});
поэтому в основном я пытаюсь писать эквивалент первого фрагмента кода выше в обычном JavaScript (прочитав сценарий кофе documentation .. это то, что я сделал:
// file name: phantomTest.js
var phantom = require('phantom');
phantom.create(function(ph) {
ph.createPage(function(page) {
page.open('http://www.google.com', function(status) {
console.log('opened google?', status);
var title = page.evaluate(function() {
return document.title;
});
console.log('page title is ' + title);
});
});
ph.exit();
});
К сожалению, это не работает! Если я запустил
node phantomTest.js
на оболочке ничего не происходит .. ничего не возвращается и процесс не прекращается .. любые идеи?
обновление:
Я только что прочитал это в phantomjs faq:
Q: Почему PhantomJS не записывается в виде модуля Node.js?
A: Короткий ответ: «Никто не может служить двум хозяевам».
Более подробное объяснение заключается в следующем.
На данный момент технически очень сложно это сделать.
Каждый модуль Node.js по существу является «подчиненным» в ядре Node.js, т. Е. «Хозяином». В текущем состоянии PhantomJS (и его включенный WebKit) должен иметь полный контроль (в синхронном режиме) по сравнению с все: цикл событий, сетевой стек и выполнение JavaScript.
Если намерение просто об использовании PhantomJS прямо из сценария работает в Node.js, такая «свободная связывание» может быть достигнуто путем запуска процесса PhantomJS и взаимодействовать с ним.
mmm .. может ли это иметь к этому какое-то отношение? но тогда вся эта библиотека не имела бы смысла!
обновление 2:
Я нашел этот код в web, который делает то же самое:
var phantom = require('phantom');
phantom.create(function(ph) {
return ph.createPage(function(page) {
return page.open("http://www.google.com", function(status) {
console.log("opened google? ", status);
return page.evaluate((function() {
return document.title;
}), function(result) {
console.log('Page title is ' + result);
return ph.exit();
});
});
});
});
, к сожалению, не работает либо .. тот же результат!
Вызова что-то «немой», потому что вы не понимаете, как это работает и/или вы не можете сделать его работать в вашем случае является простым грубым. –
Кроме того, есть https://github.com/sheebz/phantom-proxy, который более рекомендуется, чем другие мосты Node.js. Люди используют мост PhantomJS с Ruby, PHP, Node.js с переменным успехом. –
Прошу прощения за мою сильную формулировку, я возьму ее из вопроса. Я также посмотрю на «phantom-proxy». В конце дня моя цель - заставить все работать, это не умалять усилия других людей. – abbood