使用C#运行Phantomjs获取网页快照

使用C#运行Phantomjs获取网页快照,c#,asp.net,phantomjs,C#,Asp.net,Phantomjs,我试图用phantomjs抓取我自己网站的快照——基本上,这是为了创建用户提交内容的“预览图像” 我已经在服务器上安装了phantomjs,并确认通过命令行在适当的页面上运行它可以正常工作。然而,当我试着从网站上运行它时,它似乎什么都没做。我已经确认代码正在被调用,幻影实际上正在运行(我已经监控了进程,并且在调用它时可以看到它出现在进程列表中)——但是,没有生成任何图像 我不确定我应该在哪里寻找,以找出为什么它不会创建图像-有什么建议吗?相关代码块如下所示: string arguments =

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

我检查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();

它将让您了解发生了什么

从C#代码执行phantomjs最简单的方法是使用类似包装器的方法。以下示例说明了如何将其用于rasterize.js:

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

包装器API有stdout和stderr的事件;它还可以从C#Stream提供输入,并将标准输出结果读入C#Stream

您是否检查了
输出实际上是什么?有一个很好的机会,当它启动时,它没有足够的特权保存到您想要的位置。。。考虑从幻像的脚本中倾倒当前用户帐号(不知道该怎么做)或者查看它运行的帐户。它运行为.NET总帐号——就像用户尝试上传图像一样(并且我将生成的映像保存到同一个目录中,所以它应该有对该目录的写访问权)。.首先从一些简单的东西开始,例如显示“Hello world”的PhantomJS脚本。查看它是否正确输出消息。如果运行简单脚本需要很长时间,您可能会受到Windows上代理问题的影响(请参阅)。尝试添加
--proxy type=none
命令行参数以绕过代理服务器。谢谢。最终使用了不同的刮片系统,这也需要一段时间,但能够更好地调试-这是某种文件访问错误,但phantomjs没有给我足够的信息。对于使用此方法的用户,请访问到rasterize.js的链接: