在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;

更新代码中的PATH变量

我尝试的所有路径组合,我一直得到以下错误"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

搞定了。只要确保所有必需的资产都被正确地复制过来。我错过了文件路径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();
        }
    }
}