script phantom navegador how ariya javascript phantomjs

javascript - navegador - phantomJS-Pasar argumento al archivo JS



phantom script (3)

Bueno, he encontrado una alternativa al problema anterior. En lugar de usar

var address = system.args[1];

Lo estoy haciendo siguiendo la modificación a continuación.

var args = require(''system'').args; var address = ''''; args.forEach(function(arg, i) { if(i == 1) { address = arg; } }); var page = require(''webpage'').create(); page.open(address, function () { // <-- use that address variable from above page.render(''github.png''); phantom.exit(); });

Ahora mismo estoy usando el siguiente comando para ejecutar phantomJS

exec(''./phantomjs table.js'',$op,$er);

table.js

var page = require(''webpage'').create(); page.open(''table.php'', function () { page.render(''table.png''); phantom.exit(); });

Esto sirve al propósito. Pero ahora estoy obligado a trabajar con una variable dinámica, a saber, la date . Entonces, ¿es posible pasar una variable de PHP o Javascript dentro de la línea de comandos de exec para que pueda usar esa variable dentro de table.js ?

Actualizar

Intenté modificar mi código de acuerdo con una solución publicada aquí Pasando una variable a PhantomJS a través de exec

exec(''./phantomjs table.js http://www.yahoo.com'',$op,$er);

table.js

var args = require(''system'').args; var page = require(''webpage'').create(); var address = system.args[1]; page.open(address, function () { page.render(''table.png''); phantom.exit(); });

Pero esto resulta en 2 problemas:

  • Todo el proceso tarda unos 3-4 minutos para terminar
  • Después de eso recibo el mensaje "Servidor no encontrado"

Si elimino el código modificado, todo funciona como se espera.

Más depuración

Dentro de table.js usé esto:

var args = require(''system'').args; args.forEach(function(arg, i) { console.log(i+''::''+arg); }); var page = require(''webpage'').create(); var address = ''http://www.gmail.com''; page.open(address, function () { page.render(''github.png''); phantom.exit(); });

Al ejecutar esto, mi $op (del comando exec ) imprimió esto:

Array ( [0] => 0::table.js [1] => 1::http://www.yahoo.com )

Hasta ahora tan bueno. Pero tan pronto como coloco el siguiente código, se encuentran los mismos problemas.

var args = require(''system'').args; var page = require(''webpage'').create(); var address = system.args[1]; // <--- This line is creating problem, the culprit page.open(address, function () { page.render(''github.png''); phantom.exit(); });

Parece que esa no es la sintaxis correcta. ¿Algo obvio que no pueda ver?


El problema con su código es un simple descuido.

Ya has almacenado los argumentos utilizando

var args = require(''system'').args;

Así que cuando necesitas hacer referencia a ellos solo tienes que hacer:

var address = args[1];

El uso de "sistema" se ve en una matriz completamente diferente


Tenía que hacer esto y estas respuestas me indicaron que encontrara mi respuesta final. Sin embargo, como algunas personas expresaron aquí, mi navegador se estaba bloqueando ... Encontré el problema y la solución y pensé que valía la pena compartirlo ...

Esto funcionará perfectamente bien si:

exec(''phantomjs phdemo.js http://google.com'', $o, $e); ?> var page = require(''webpage'').create(); var system = require(''system''); var address = system.args[1]; page.open(address, function () { page.render(''output.pdf''); phantom.exit(); });

Sin embargo, si desea pasar más de un parámetro en la dirección url, por ejemplo, google.com?searchteext&date=today, descubrí que el carácter ''&'' bloquea el navegador porque lo espera como un comando diferente.

Mi solución fue usar el mismo pero en lugar de poner & usé el signo @ para que la url se vea como google.com?searchteext@date=today

luego en el otro extremo he añadido una cadena de reemplazo

var address = address.replace(/@/gi,"&");

Entonces, todo funciona perfectamente bien ... Puede haber otras formas de hacerlo, pero esto funcionó perfectamente para mí.