Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

311
Views
Cómo pasar un archivo JS dinámico a PhantomJS

Estoy tratando de tomar el valor de la entrada am, uso AJax para enviar estas variables a una función php, llamar a PhantomJS desde dicha función PHP CON estos argumentos pasados desde AJax y devolver el resultado a la página HTML . Estoy pasando las variables al archivo PHP perfectamente bien, el problema surge al llamar a PhantomJS con mi script seguido de los tres argumentos.

Este es el script en mi página de PHP para llamar a PhantomJS

 echo json_encode(array("abc" => shell_exec('/Applications/XAMPP/htdocs/scripts/phantom/bin/phantomjs /Applications/XAMPP/htdocs/scripts/phantom/examples/test.js 2>&1',$website)));

Este es el script al que se hace referencia en el script de shell:

 var args = require('system').args; args.forEach(function(arg, i) { console.log(i+'::'+arg); }); var page = require('webpage').create(); var address = args[1]; page.open(address, function () { console.log("Done") });

Como puede ver, debería ser un proceso relativamente simple, excepto que no se está haciendo echo en nada. Los permisos para cada archivo son más que adecuados, y estoy seguro de que estos archivos se están ejecutando porque si cambio el script de shell para ejecutar hello.js , todo se echo y se registra perfectamente.

TAMBIÉN TENGA EN CUENTA que este script se está ejecutando en mi servidor web, por lo que no estoy 100% seguro de que HAYA una variable system .

¿Algunas ideas?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Primer problema, shell_exec() toma un solo argumento ( Documentación ). Sin embargo, su ejemplo está pasando el argumento de shell ($sitio web) como un segundo argumento en shell_exec().

Ejemplo corregido:

 $shellReturn = shell_exec("/Applications/XAMPP/htdocs/scripts/phantom/bin/phantomjs /Applications/XAMPP/htdocs/scripts/phantom/examples/test.js " . $website); echo json_encode(array("abc" => $shellReturn));

Para simplificar, excluí la redirección de la tubería de error. Además, le sugiero que pase los argumentos como JSON envuelto en codificación base64. Esto elimina el espaciado de URL que genera múltiples argumentos. Una vez que PhantomJS recibe los argumentos del sistema, use atob() para recuperar el JSON e iterar sobre el JSON obj en lugar de los argumentos de cadena sin formato.

También le recomendaría este proyecto: https://github.com/merlinthemagic/MTS , Under the hood es una instancia de PhantomJS, el proyecto solo envuelve la funcionalidad de PhantomJS.

 $myUrl = "http://www.example.com"; //replace with content of your $website variable $windowObj = \MTS\Factories::getDevices()->getLocalHost()->getBrowser('phantomjs')->getNewWindow($myUrl); //if you want the DOM or maybe screenshot and any point run: $dom = $windowObj->getDom(); $imageData = $windowObj->screenshot();
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!