Вызов скрипта PhantomJS из кода VB.NET с использованием Powershell - PullRequest
0 голосов
/ 26 июня 2018

В настоящее время я пытаюсь использовать phantomJS, чтобы сделать снимок веб-страницы для работы. У меня есть скрипт, работающий правильно, и я могу запустить его из powershell.

Dim PhantomString As String = $"'{System.Environment.CurrentDirectory}\phantomjs' PhantomJSScript.js {parameter1} {parameter2} {parameter3} {parameter4}"

Это строка, представляющая вызов, который я использую в powershell для выполнения моего PhantomJSScript, который называется PhantomJSScript.js. Когда я пытаюсь запустить эту команду из своего кода на vb.net, я получаю сообщение об ошибке, что параметры не распознаются как токены. Я использую System.Management.Automation.Runspaces.Runspace и другие дочерние библиотеки для выполнения этого.

Using MyRunSpace As Runspace = RunspaceFactory.CreateRunspace
    MyRunSpace.Open()
    Dim MyPipeline As Pipeline = MyRunSpace.CreatePipeline()
    MyPipeline.Commands.AddScript(PhantomString, True)

    Dim pipeLineResult As Collection(Of PSObject) = MyPipeline.Invoke()
    If MyPipeline.Error.Count > 0 Then
        ImageList = Nothing
    Else
        ImageList = (From pipeOut In pipeLineResult Select (pipeOut.ToString)).ToList
    End If
End Using
Return ImageList

Это код, который я использую для запуска команды. Чтобы компенсировать ошибку, которая появляется, когда {parameter1} не является распознанным токеном, я попытался использовать свойство параметров в команде. Вместо этого я добавил каждый из параметров в PhantomString в свойство команды и удалил их из PhantomString. Это позволило скрипту работать (или так казалось), однако он просто вернул точное значение PhantomString, которое я передал. Я ожидал битового представления запрошенного изображения.

Вот как выглядит мой код, когда я пытаюсь передать параметры другим способом:

    Dim PhantomString As String = $"'{System.Environment.CurrentDirectory}\phantomjs'"

    Using MyRunSpace As Runspace = RunspaceFactory.CreateRunspace
        MyRunSpace.Open()
        Dim MyPipeline As Pipeline = MyRunSpace.CreatePipeline()
        MyPipeline.Commands.AddScript(PhantomString, True)
        MyPipeline.Commands.FirstOrDefault.Parameters().Add("arg1", "PhantomJSScript.js")
        MyPipeline.Commands.FirstOrDefault.Parameters().Add("arg2", $"{parameter1}")
        MyPipeline.Commands.FirstOrDefault.Parameters().Add("arg3", $"{parameter2}")
        MyPipeline.Commands.FirstOrDefault.Parameters().Add("arg4", $"{parameter3}")
        MyPipeline.Commands.FirstOrDefault.Parameters().Add("arg5", $"{parameter4}")

        Dim pipeLineResult As Collection(Of PSObject) = MyPipeline.Invoke()
        If MyPipeline.Error.Count > 0 Then
            ImageList = Nothing
        Else
            ImageList = (From pipeOut In pipeLineResult Select (pipeOut.ToString)).ToList
        End If
    End Using

    Return ImageList

Может ли кто-нибудь дать мне несколько советов о том, как это работает правильно?

Спасибо!

1 Ответ

0 голосов
/ 26 июня 2018

Итак, с тех пор я решил проблему. По сути, это связано с тем, что в пути к локальному хосту к .exe есть пробел. Я справился с этим, просто переместив phantomjs.exe по другому пути без пробелов в именах каталогов. Когда это перемещается в dev / staging / live, нам не нужно беспокоиться о месте, потому что путь к файлу совершенно другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...