我在Firefox上使用iMacros来自动下载我的Wells Fargo PDF银行对帐单,并为文件指定链接的名称,例如“ Statement 04/22/12(597K)”

但是,文件名中不能包含斜线(Windows限制...)。因此,我尝试用破折号代替正斜杠。

这是我的iMacro。我在以下行收到错误代码:

SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\"; s.replace(/\//g, "-");")


我的JavaScript或Regex无法正常工作,我也不知道为什么。我的语言都不强-我已尽力从其他示例中复制,但没有成功。如果可以的话,那就太好了。谢谢。

VERSION BUILD=5010424 RECORDER=CR
' SET !ERRORIGNORE YES

TAB OPEN
TAB T=2
URL GOTO=https://online.wellsfargo.com/login
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:Signon ATTR=ID:username CONTENT=XXX
SET !ENCRYPTION TMPKEY
TAG POS=1 TYPE=INPUT:PASSWORD FORM=ID:Signon ATTR=ID:password CONTENT=XXX
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:Signon ATTR=NAME:continue&&VALUE:Sign<SP>On
TAG POS=1 TYPE=A ATTR=TXT:View<SP>online<SP>statements

SET !EXTRACT_TEST_POPUP NO

TAG POS=1 TYPE=A ATTR=TXT:Statement<SP>* EXTRACT=TXT
SET !VAR1 EVAL("var s=\"{{!EXTRACT}}\"; s.replace(/\//g, "-");")    <---- THIS IS THE PROBLEMATIC LINE!!!!!!!!!!!!!!
ONDOWNLOAD FOLDER=D:\Wells<SP>Fargo\CREDIT<SP>CARD\ FILE={{!VAR1}}.pdf
TAG POS=1 TYPE=A ATTR=TXT:Statement<SP>* CONTENT=EVENT:SAVETARGETAS

TAB CLOSE


另外,如果您知道如何用JavaScript中的Regex删除“(597K)”,那将是锦上添花。 (显然,对于每个不同的文件,此文本字符串的值都将不同,因此它必须是动态的)

最佳答案

您错过了将"-"中的引号转义的问题,因此结束了iMacros字符串而不是启动JavaScript字符串。

您还可能在/\//正则表达式中遇到问题,因为我怀疑iMacros会吃掉\/并将其转换为/,从而使JS带有无效的文字///。它必须是/\\//

另外,如果!EXTRACT变量包含引号,反斜杠或换行符,它将直接将它们插入JavaScript代码中,从而破坏JS字符串文字并可能执行任意脚本。

这些是嵌套转义上下文的许多问题的示例。您可以使用替代的非冲突引号来避免前两个,而可以使用简单的字符串replace split / join惯用语代替正则表达式文字:

SET !VAR1 EVAL("'{{!EXTRACT}}'.split('/').join('-').split(' (')[0]")


但这仍然留下了JS注入问题。从手册的快速浏览来看,iMacros似乎没有任何可用的字符串处理功能,因此您将无法手动执行JS-string-literal-replace,或者实际上只是执行/-从iMacros内部进行-替换。那将是明智的选择。从字符串创建可执行代码几乎总是要避免的灾难性错误。

[除了rant:从那本手册的来看,iMacros的存在使我真的很不高兴。它为您提供了一种完全任意但无能为力的自制脚本语言,而不仅仅是使用已经可用的JavaScript,然后使您无论如何都去JS做任何可笑的琐事……并且没有提供给您安全地在两者之间传递值的工具。这个软件的意义何在?自从4GL进入黑暗时代以来,我一直没有为尝试错误的语言设计而感到沮丧。这太可怕了。人们使用这个吗?]

09-28 10:46