【问题标题】:Unable to Invoke Inserted Javascript Fragment无法调用插入的 Javascript 片段
【发布时间】:2019-05-01 09:48:38
【问题描述】:

我正在尝试将 Javascript 片段插入网页,然后使用蓝色棱镜调用它。这样做的目的是分析从搜索中返回的元素,以确定整个流程流中的下一步。

我已经使用 IE 11 开发者控制台在目标网站上测试了 Javascript 代码,它可以正常工作。代码如下,以防有用。

function includes(stringToCheck, CharacterToSearchFor)
{
    var found = new Boolean();
    var splitString = stringToCheck.split("");

    for (var index = 0; index < splitString.length; index++) 
    {
        if(splitString[index] == CharacterToSearchFor)
        {
            return true;
        }
    }
    return false;
}

function getPartners() //declare a function which can be called from BP. once called all code within the enclosing {} will be run
{
    var searchResults = document.getElementsByClassName("findASolicitorListItem"); //search the web page for all elements with a specific tag and store them in a variable called searchResults.

    if(searchResults.length == 0) // If the number 
    {
        alert( "No Solicitors were found.");
    }else if(searchResults.length == 1)
    {
        var innerSearchResults = searchResults[0].getElementsByTagName("span");

        for(i = 0; i < innerSearchResults.length; i++)
        {
            var spanText = innerSearchResults[i].innerText.toString();

            if((spanText != ""))
            {
                if(!includes(spanText, "|"))
                {
                    alert("One Solicitor found. " + spanText);
                }
            }
        }

    }else if (searchResults.length > 1)
    {
        alert( "More than one solicitor was found. Manual Checking required.");
    }
}

这存储在数据项中,并被传递到导航阶段(插入 Javascript 片段)参数。

PrintScreen of Insert Javascript Fragment stage

当这个阶段运行时,它成功地将 Javascript 函数注入到网页中。

然后我尝试调用这个插入的 javascript 片段

Printscreen of Invoke Javascript Function stage

当这个阶段运行时,我收到 Blue Prism 引发的以下错误消息。

内部:无法在“分析搜索结果”页面上的导航阶段“分析结果”中执行步骤 1 - 调用 javascript 方法时失败:来自 HRESULT 的异常:0x80020101-> 在 mshtml.HTMLWindow2Class.IHTMLWindow2_execScript(字符串代码,字符串语言) 在 BluePrism.ApplicationManager.HTML.clsHTMLDocument.InvokeJavascriptMethod(String methodname, String jsonargs, Object& retval, String& sErr)

我已搜索此错误代码并找到 this 答案,这表明代码存在问题,但是我可以手动运行此代码就好了。

是否有人在 BluePrism 中使用过这些方法,或者在谁能帮我解决之前看到此错误消息?

【问题讨论】:

    标签: blueprism rpa


    【解决方案1】:

    我实际上从来没有能够让Invoke Function 可靠地使用参数,我总是使用Insert Fragment 来处理所有事情,包括调用。

    如果将此函数作为片段插入...

    function sayHello(name)
    {
        alert("Hello " + name + "!");
    }
    

    ...要调用它,您只需将其作为另一个片段插入:

    sayHello("World");
    

    多多!

    附带说明一下,我不确定您使用 Application Modeler 中的哪个元素来插入片段,但您似乎正在使用根(应用程序)节点。我在将片段插入专用 HTML BODY 元素方面有更好的体验,由于某种原因,性能要好得多。

    【讨论】:

    • 谢谢!这就像一个魅力!我确实注意到插入片段时有一点延迟,我会尝试创建一个 body 元素,看看是否效果更好。
    【解决方案2】:

    要通过“调用 Javascript 函数”动作调用函数,在参数字段中,您应该将参数以 JSON 语法形式输入。如果没有参数,则输入“[{}]”。

    在上述 Marek 的示例中,函数应该如下所示:

    function sayHello(name)
    {
        alert("Hello " + name.name + "!");
    }
    

    和参数:“[{'name':'world'}]”。

    【讨论】:

    • 这很好用,并使用了内置的“调用 Javascript 函数”。非常有趣的是参数是 JSON 格式
    • 很好,我不知道。它也适用于对象引用吗?喜欢this 参考?
    • 在这种情况下恐怕不行,但我还没有完全测试过
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多