6

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();
Community
  • 1
  • 1

1 Answers1

2

Got it working. Just make sure ALL required assets are properly copied over. I missed the file package.json in the filepath C:\casperjs\n1k0-casperjs-4f105a9

This now works for me

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

    }

}
  • *Comment from [aselan](http://stackoverflow.com/users/1942480/aselan):* I can't get to work casper with C# Process. I found out your post. So where do you exact keep casperjs files and script OSTESTcasper.js? Where do you keep file OSTESTcasper.js? Is it possible that you send me whole project with all resources (also python, casper and phatom files)? – Artjom B. Oct 28 '14 at 10:34