在c#项目中部署CasperJS
本文关键字:部署 CasperJS 项目 | 更新日期: 2023-09-27 18:15:24
Tl:dr -我如何从c#项目文件夹中引用CasperJS和PhantomJS ?
当我手动解压缩CasperJS和PhantomJS的二进制文件到C:驱动器时,我已经得到了从c#项目运行CasperJS脚本的工作代码。(请看这里有一个简单的指南和下面标有工作代码的工作代码:)
由于不需要安装,我认为将这些移动到c#项目文件夹而不是'tools'casperjs
和'tools'phantomjs
会很容易。此外,我需要使用p.StartInfo.EnvironmentVariables["PATH"] = EnvPath;
我尝试的所有路径组合,我一直得到以下错误"Fatal: [Errno 2] No such file or directory; did you install phantomjs?"
所有文件都明确包含在文件路径中。我错过了什么明显的东西吗?
非工作代码: [fileppaths 'tools'casperjs, 'tools'phantomjs &C: ' Python34]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Casper
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string Cpath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
//;C:'phantomjs;C:'casperjs'batchbin
FileInfo csp1 = new FileInfo(Cpath + @"'tools'casperjs'n1k0-casperjs-4f105a9'bin'casperjs");
FileInfo csp2 = new FileInfo(Cpath + @"'tools'casperjs'batchbin");
FileInfo pht = new FileInfo(Cpath + @"'tools'phantomjs");
string EnvPath = string.Format(";{0};{1}", pht, csp2);
DirectoryInfo dir = csp1.Directory;
FileInfo path = new FileInfo(@"C:'Python34'python.exe");
string arg = String.Format("casperjs TESTcasper.js");
ExecutePythonScript(dir, path, arg, EnvPath);
}
private static void ExecutePythonScript(DirectoryInfo workingDir, FileInfo pythonPath, string casperArguments, string EnvPath)
{
var p = new Process();
p.StartInfo.EnvironmentVariables["PATH"] = EnvPath;
p.StartInfo.WorkingDirectory = workingDir.FullName;
p.StartInfo.FileName = pythonPath.FullName;
p.StartInfo.Arguments = casperArguments;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.ErrorDataReceived += (s, e) =>
{
if (!string.IsNullOrEmpty(e.Data))
MessageBox.Show("e> " + e.Data);
};
p.OutputDataReceived += (s, e) =>
{
if (!string.IsNullOrEmpty(e.Data))
MessageBox.Show("->" + e.Data);
};
p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit();
p.Close();
}
}
}
工作代码:[文件路径C:'casperjs, C:'phantomjs &C: ' Python34]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Casper
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//
FileInfo info = new FileInfo(@"C:'casperjs'n1k0-casperjs-4f105a9'bin'casperjs");
DirectoryInfo dir = info.Directory;
FileInfo path = new FileInfo(@"C:'Python34'python.exe");
string arg = @"casperjs TESTcasper.js";
ExecutePythonScript(dir, path, arg);
}
private static void ExecutePythonScript(DirectoryInfo workingDir, FileInfo pythonPath, string casperArguments)
{
var p = new Process();
p.StartInfo.WorkingDirectory = workingDir.FullName;
p.StartInfo.FileName = pythonPath.FullName;
p.StartInfo.Arguments = casperArguments;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.ErrorDataReceived += (s, e) =>
{
if (!string.IsNullOrEmpty(e.Data))
MessageBox.Show("e> " + e.Data);
};
p.OutputDataReceived += (s, e) =>
{
if (!string.IsNullOrEmpty(e.Data))
MessageBox.Show("->" + e.Data);
};
p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit();
p.Close();
}
}
}
TESTcasper.js
var casper = require('casper').create();
casper.start('http://casperjs.org/', function() {
this.echo(this.getTitle());
});
casper.thenOpen('http://phantomjs.org', function() {
this.echo(this.getTitle());
});
casper.run();
搞定了。只要确保所有必需的资产都被正确地复制过来。我错过了文件路径C:'casperjs'n1k0-casperjs-4f105a9
package.json
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Casper
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string Cpath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
//;C:'phantomjs;C:'casperjs'batchbin
FileInfo csp1 = new FileInfo(Cpath + @"'tools'casperjs'n1k0-casperjs-4f105a9'bin'casperjs");
FileInfo csp2 = new FileInfo(Cpath + @"'tools'casperjs'n1k0-casperjs-4f105a9'batchbin");
FileInfo pht = new FileInfo(Cpath + @"'tools'phantomjs'phantomjs-1.9.7-windows'");
string EnvPath = string.Format(";{0};{1}", pht, csp2);
DirectoryInfo dir = csp1.Directory;
FileInfo path = new FileInfo(@"C:'Python34'python.exe");
string arg = String.Format("casperjs OSTESTcasper.js");
ExecutePythonScript(dir, path, arg, EnvPath);
}
private static void ExecutePythonScript(DirectoryInfo workingDir, FileInfo pythonPath, string casperArguments, string EnvPath)
{
var p = new Process();
p.StartInfo.EnvironmentVariables["PATH"] = EnvPath;
p.StartInfo.WorkingDirectory = workingDir.FullName;
p.StartInfo.FileName = pythonPath.FullName;
p.StartInfo.Arguments = casperArguments;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.ErrorDataReceived += (s, e) =>
{
if (!string.IsNullOrEmpty(e.Data))
MessageBox.Show("e> " + e.Data);
};
p.OutputDataReceived += (s, e) =>
{
if (!string.IsNullOrEmpty(e.Data))
MessageBox.Show("->" + e.Data);
};
p.Start();
p.BeginOutputReadLine();
p.BeginErrorReadLine();
p.WaitForExit();
p.Close();
}
}
}