2015-05-28 4 views
2

Я пишу службу в Go, и я использую phantomJS для создания изображения с заданного URL-адреса. Из моей программы Go я использую Exec, чтобы запустить двоичный файл phantomJS. Это отлично работает, но теперь я ищу способ передать полный код вместе с вызовом, который запускает двоичный файл. Мой код выглядит следующим образом:Пройти полный код для phantomjs

var args = require('system').args; 
var webPage = require('webpage'); 
var page = webPage.create(); 

page.viewportSize = { 
    width: 1920, 
    height: 1080 
}; 

page.open("http://www.url2fetch.com", function (status) { 
    var base64 = page.renderBase64('PNG'); 
    console.log(base64); 
    phantom.exit(); 
}); 

Это никогда не меняется. Кроме URL-адреса, чтобы получить :). Поэтому мой конкретный вопрос: возможно ли запустить phantomJS и передать вышеприведенный код в качестве параметра, чтобы он мог выполняться одним вызовом. Причина для этого: я не хочу упаковывать скрипт phantomjs вместе с моей программой Go.

+0

Является ли код, который вы хотите передать динамически генерируемому PhantomJS? Если нет, то в чем динамика? Не можете ли вы просто поместить его в файл и передать некоторые параметры в скрипт? –

+0

Код действительно динамически генерируется. То есть: одна часть динамически, 'url'. Я действительно могу записать его в файл, но это означает, что мне придется отправить его вместе с моим бинарным golang. Было бы намного лучше, если бы мой код Go довел код до двоичного кода phantomJS. –

ответ

5

У PhantomJS есть интерактивная версия, где вы можете передавать код через stdin, но есть bug (версии 1.9.x и 2.0.0), из-за чего никакие страницы не могут быть открыты, что делает это непригодным для использования.

Невозможно передать сценарий в PhantomJS для интерпретации. У вас должен быть хотя бы один файл. Вы можете

  1. создать шаблон файла, который вы грузите с исполняемым файлом и вызвать PhantomJS с этим файлом и дополнительным параметром (URL) или

  2. вы генерировать файл перейти в какой-нибудь временный каталог и пусть PhantomJS использует его.

Если у вас есть основания полагать, что время-записи против времени в использовании уязвимости будет эксплуатироваться, то вы должны пойти с вариантом 1.

Чтобы сделать первый случай в комплекте , вы можете использовать system.args в PhantomJS, чтобы прочитать переданные параметры командной строки из go, такие как URL.

+0

Thanks; вариант 1 это будет, используя system.args [1], чтобы получить url. –

1

Если вы используете Linux, вы можете поместить этот код в начало скрипта PhantomJS.

#!/usr/bin/env phantomjs 

Это означает, что, когда этот файл вызывается, это похоже на то, что он был вызван терминалом.

$ phantomjs script.js args 
+1

Я только что проверил, и он работает в Windows (MSysGit). –

-2

Интерактивная версия phantomjs является completely screwed as of writing.

Из-за этого, если вы не хотите использовать дополнительный файл в своем проекте, самый чистый способ (если вы просто распространяете скрипт, а не набор каталогов) состоит в том, чтобы сгенерировать файл js с произвольным именем в temp, запустите его и удалите.

Смежные вопросы