Tl:dr - How can I reference CasperJS and PhantomJS from the C# project folder?
I've got working code that runs a CasperJS script from a C# project when I manually unzip the binaries for CasperJS and PhantomJS to the C: drive. (See here for a simple guide and working code below labelled WORKING Code:)
As there is no installation needed I thought it would be easy enough to move these to the C# project folder instead \tools\casperjs
and \tools\phantomjs
. Also, I need to update the PATH variable in code using p.StartInfo.EnvironmentVariables["PATH"] = EnvPath;
All of the combination of paths I attempt I keep getting the following error "Fatal: [Errno 2] No such file or directory; did you install phantomjs?"
All of the files have definitely been included in the file path. Am I missing something obvious?
NON WORKING Code: [filepaths \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();
}
}
}
WORKING Code: [filepaths 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();