运行使用C#Phantomjs抢网页快照(Running Phantomjs using C# to

2019-07-17 14:30发布

我试图抓住使用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();

Answer 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();

它会给你发生了什么事的想法



Answer 2:

从C#代码执行phantomjs最简单的方法是使用包装像NReco.PhantomJS 。 下面的例子演示了如何使用它rasterize.js:

var phantomJS = new PhantomJS();
phantomJS.Run( "rasterize.js", new[] { "https://www.google.com", outFile} );

包装API对输出和错误事件; 也可以从C#流提供输入和读出的stdout导致到C#流。



文章来源: Running Phantomjs using C# to grab snapshot of webpage