Запуск Phantomjs с использованием C# для получения снимка веб-страницы
Я пытаюсь получить снимки моего собственного сайта с помощью phantomjs - в основном, это создать "предварительное изображение" пользовательского контента.
Я установил phantomjs на сервер и подтвердил, что запуск его из командной строки на соответствующих страницах работает нормально. Тем не менее, когда я пытаюсь запустить его с веб-сайта, он ничего не делает. Я подтвердил, что код вызывается, что фантом на самом деле работает (я отслеживал процессы и вижу, что он появляется в списке процессов, когда я его вызываю) - однако изображение не генерируется.
Я не уверен, где я должен искать, чтобы выяснить, почему он не будет создавать изображения - какие-либо предложения? Соответствующий кодовый блок находится ниже:
string arguments = "/c rasterize.js http://www.mysite.com/viewcontent.aspx?id=123";
string imagefilename = @"C:\inetpub\vhosts\mysite.com\httpdocs\Uploads\img123.png";
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = false;
p.StartInfo.FileName = @"C:\phantomjs.exe";
p.StartInfo.Arguments = arguments + " " + imagefilename;
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
2 ответа
Я проверяю ошибки, которые выдает phantomjs во время процесса. Вы можете прочитать их из Process.StandardError.
var startInfo = new ProcessStartInfo();
//some other parameters here
...
startInfo.RedirectStandardError = true;
var p = new Process();
p.StartInfo = startInfo;
p.Start();
p.WaitForExit(timeToExit);
//Read the Error:
string error = p.StandardError.ReadToEnd();
Это даст вам представление о том, что произошло
Самый простой способ выполнения phantomjs из кода C# - это использование оболочки, такой как NReco.PhantomJS. В следующем примере показано, как использовать его для rasterize.js:
var phantomJS = new PhantomJS();
phantomJS.Run( "rasterize.js", new[] { "https://www.google.com", outFile} );
Wrapper API имеет события для stdout и stderr; также он может обеспечить ввод из C# Stream и считывать результат stdout в C# stream.