read parse nodejs node manipulation node.js d3.js phantomjs jsdom

node.js - parse - npm dom



¿Migrar de jsdom a phantomJS?(creación básica de DOM) (1)

Como desea hacer esto desde node.js, debe usar un puente PhantomJS como phantomjs-node (módulo phantom npm).

Cuando no abre una página en PhantomJS, en realidad está trabajando en una página sobre: ​​en blanco, necesita agregar la opción de línea de comando ''--local-a-remote-url-access = yes'' para el proceso PhantomJS subyacente, para que los recursos remotos puedan ser cargados Tal vez --web-security=false , --ssl-protocol=any e ignore-ssl-errors=true pueden ser necesarios.

Para inyectar scripts adicionales en DOM, debe usar injectJs() para archivos locales e includeJs() para archivos remotos. Además, no se puede acceder directamente al DOM en PhantomJS, ya que tiene dos contextos. El contexto de la página de espacio aislado ( page.evaluate() ) no tiene acceso a las variables definidas en el exterior, por lo que tendrá que pasarlas explícitamente, si las necesita.

var phantom = require(''phantom''); var async = require(''async''); function run(page, ph) { page.evaluate(function () { // page context: DOM code here return document.title; }, function (title) { // node code here console.log(''Page title is '' + title); ph.exit(); }); } var remoteScripts = [ "http://d3js.org/d3.v3.min.js" ]; var localScripts = [ "../js/d3.v3.min.js", "../js/jquery-2.1.3.min.js" ]; phantom.create(''--local-to-remote-url-access=yes'', ''--web-security=false'', function (ph) { ph.createPage(function (page) { async.series(remoteScripts.map(function(url){ return function(next){ page.includeJs(url, function(){ next(); }); }; }), function(){ async.series(localScripts.map(function(url){ return function(next){ page.injectJs(url, function(){ next(); }); }; }), function(){ run(page, ph); }); }); }); });

Puede usar async para cargar listas de secuencias de comandos en el DOM. Usé la función de series() .

M. Bostock señaló que nodejs ''jsdom tiene soporte incompleto para svg y, para mí, no es compatible con getBBox() . Además, recomendó cambiar a PhantomJS de nodejs. Lo revisé, pero el enfoque es nuevo para mí.

Mi script nodejs + jsdom crea un DOM virtual, con el cual se reproduce mi d3js y es el siguiente:

var jsdom = require(''jsdom''); jsdom.env( // creates virtual page "<html><body></body></html>", // create my DOM hook, [ ''http://d3js.org/d3.v3.min.js'', // add my online dependencies ... ''../js/d3.v3.min.js'', // ... & local ones ''../js/jquery-2.1.3.min.js''], function (err, window) { //my normal JS or nodejs code here ! } );

¿Cómo migrar este nodejs + jsdom a nodejs + PhantomJS?