Запуск Phantomjs с использованием С# для захвата моментального снимка веб-страницы
Я пытаюсь захватить снимки своего собственного сайта с помощью phantomjs - в основном, это создать "изображение предварительного просмотра" контента, представленного пользователем.
Я установил phantomjs на сервер и подтвердил, что выполнение его из командной строки на соответствующих страницах отлично работает. Однако, когда я пытаюсь запустить его с веб-сайта, он, похоже, ничего не делает. Я подтвердил, что код вызывается, что phantom фактически работает (я отслеживал процессы и вижу, что он появляется в списке процессов, когда я его вызываю), однако изображение не создается.
Я не уверен, где я должен искать, почему он не будет создавать изображения - любые предложения? Соответствующий блок кода ниже:
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();
Ответы
Ответ 1
Я проверяю ошибки, которые 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();
Это даст вам представление о том, что произошло
Ответ 2
Самый простой способ для выполнения phantomjs из кода С# - использовать обертку, например NReco.PhantomJS. Следующий пример иллюстрирует, как использовать его для rasterize.js:
var phantomJS = new PhantomJS();
phantomJS.Run( "rasterize.js", new[] { "https://www.google.com", outFile} );
API-интерфейс Wrapper имеет события для stdout и stderr; также он может предоставлять входные данные из С# Stream и считывать результат stdout в поток С#.