Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

312
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda