【问题标题】:How to define / existing javascript function in iMacro如何在 iMacro 中定义/现有的 javascript 函数
【发布时间】:2015-11-20 11:19:22
【问题描述】:

我是 iMacro 的新手,所以如果我使用 iMacro 的方法不正确,请纠正我。

我创建了一些有助于在 DOM 上测试某些条件的 javascript 函数。问题是我无法将 javascript 函数(来自外部 js 文件以及在 imacro 的 .js 脚本上定义)包含到我的测试文件中,并在测试用例执行期间从 js lib 调用函数。

【问题讨论】:

    标签: javascript jquery firefox-addon imacros


    【解决方案1】:

    您是否尝试过使用iimGetLastExtract()

    您可以创建一个调用 imacros 的 .js 文件。这些宏可以从 DOM 中提取您需要的信息。使用 iimGetLastExtract() 您可以提取这些值并在 js 中对其进行测试

    当您在 FF 中时,您实际上可以从 imacros 菜单中选择要运行的 .js 文件。

    这是一个旧的 .js 文件示例,我曾经做过这样的事情。我循环遍历动态创建的下拉列表的值并根据其值执行操作。 (如果宏失败,它的值会小于 0:error codes

    var i = 1;
    var notDone = 1;
    while(notDone > 0)  {
        //select the board from available
        iimSet('name', boardname);
        iimPlay('selectBoard.iim');
        //pick the next display view and capture the view name
        iimSet('index',i);
        notDone = iimPlay('assignDisplay.iim');
    
        var displayName = iimGetLastExtract(1),
            inputName = iimGetLastExtract(2),
            label = '';
    
        if((displayName == '[None]' && displayName == '[None]')  || !notDone) {
            break;
        }
        label = (displayName === '[None]') ? inputName : displayName;
        if(prefix) label = prefix + label;
        if(suffix) label += suffix;
        iimSet('name', label);
        iimSet('btn',btn);
        iimPlay('assignLabelInput.iim');
        i++;
    }
    

    如果您不熟悉其中的某些内容。我使用 iimSet() 在 imacros 中设置变量。 iimPlay 播放该宏。而在宏本身,这里有一个提取信息的例子

    TAG POS=1 TYPE=SELECT FORM=NAME:form1 ATTR=ID:dropdownid EXTRACT=TXT
    

    编辑 这是一个愚蠢的例子,有望展示 js 的使用和 imacros 提取功能 代码


    example.js

    var allAnswerVotes=[];
    var runningTotal = 0;
    var working = true;
    var i = 2;
    while(working) {
        iimSet('i', i);
        iimPlay('getVotes.iim');
    
        var extract = iimGetLastExtract(1);
        if(extract === '#EANF#') {
            working = false;
            continue; //hault this iteration;
        }
    
        var numVotes = parseInt(extract, 10);
        allAnswerVotes.push(numVotes);
        runningTotal += numVotes;
        i++;    //increment i to get the next vote
    
    }
    alert('The highest vote is '+ Math.max.apply(null, allAnswerVotes)+', with an average of '+ Math.ceil(runningTotal / allAnswerVotes.length));
    

    getVotes.iim

    TAG POS={{i}} TYPE=SPAN ATTR=class:*vote-count-post* EXTRACT=TXT
    

    解释


    首先要确保这两个文件(example.js、getVotes.iim)位于同一文件夹中,以便 example.js 正确运行 getVotes.iim。 接下来,您只需导航到任何 StackOverflow 线程,从 imacros 菜单中选择 example.js(f8 打开菜单)并推送播放(或只需双击 example.js)

    该宏将找到类包含“vote-count-post”的第 i 个位置跨度,并返回该跨度的文本。 i是js传入的参数。我们将从 i = 2 开始,因此第二个投票跨度(我们跳过对问题的投票,只计算答案的投票)。 js将继续调用getVotes.iim,直到getVotes返回一个提取值“#EANF#”,这是宏找不到指定标签时(即当前页面上没有投票时)的返回值。 #EANF# 会将我们踢出我们的循环,然后您会收到有关我们统计的选票的一些基本数学的警报。

    这里的选票提取非常愚蠢,但我只是在演示如何在 js 中使用 imacros EXTRACT 的基本示例

    【讨论】:

    • 感谢您的回复,您能否提供一个示例工作代码,因为您正在使用selectBoard.iim 等外部文件。我无法获得该过程。
    • 我编辑了我的答案以包含一个完整的 .js 和 .iim 文件以用作基本示例。您可以在您的 imacros 文件夹中创建这些文件并将上面的代码粘贴到其中以查看示例。您很可能需要更复杂的测试和标记语句,但希望这可以帮助您入门
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-25
    • 2014-04-21
    相关资源
    最近更新 更多