我正在尝试创建一个宏以登录到公司拥有的网页。当我记录将光标放到“用户名”文本框中时,将记录以下命令:
TAG POS = 1 TYPE = INPUT:TEXT FORM = ACTION:/pdp/qnyfy/resumeSAML50/pdp/startSSO.ping
问题在于标记行的“ qnyfy”部分发生了变化。下次我尝试记录该标记行时,除了“ qnyfy”变为其他内容外,其他所有内容都相同。这使我的VBA代码无法登录该网页。
有没有一种方法可以首先提取此信息,找出应该包含的5个字符,然后重新构建字符串以使用正确的标记行?
Windows 7 Excel 2016 iMacros 10.3
谢谢您的帮助........
答案 0 :(得分:1)
好的,@ OP在iMacros论坛(iMacros Tag Line Properties)上打开了一些并行线程,这使我可以简化一下此答案,并删除一些原始的IF-IF-IF ... (并行线程包含更多(背景)信息以及适用于该特定脚本的更精确的Sols / Script,以供有兴趣的人使用。)
首先,FCI(完整配置信息)最初并不完全清楚,现在是:
=> iMB v10.3,“脚本接口” v10.3,Win7。
(“ iMacros v10.3”也可能意味着“ v10.3 for CR'Free'/'PE'...”
(“ TAG”语句在此线程中被截断,它是并行线程中的完整+完整脚本...)
几种解决方案,我将从“最简单”变为“更复杂”:
1-可以简单地完全删除“ FORM”参数。通常不需要它,除非页面上有多个具有相似HTML元素的表单,这里是“ INPUT”字段。
2-与“ 1”相同,但例如,如果页面上有多个具有相似(但不相同)的表单,则使用“ CLASS”属性或可能唯一标识此“ INPUT”字段的任何属性“输入”字段。 (或者如果它们相同,则通过调整'POS = n'...)
3-与'1'或'2'相同,但在某些HTML元素上与“相对位置”组合在一起,可以“轻松”地识别并唯一地用作内部('3a')的锚点相同的“ FORM”或“ DIV”(=>此“ INPUT”可能在其旁边有一些“标签”,例如“ Login:”),或者如果该Form有一些名称/,则仅在外部(“ 3b”)该“部分”的标题,通常为“ H2”或“ H3”类型。
4-只需用通配符替换动态部分(“ qnyfy”):
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/pdp/*/resumeSAML50/pdp/startSSO.ping
溶胶[1-4]可能会提供“捷径”以实现所需的结果,但实际上他们并没有真正回答@OP的Qt,即“如何识别/提取/分离此” qnyfy” 5字母字符串...?“
5-使用[1-4]方法中的第一个方法,设法标记将在该“ FORM”内部的某些元素,或者是“ INPUT”字段本身,或者是一个可用作“ 3a”中锚点的元素(在表单内包含锚点),然后使用“双重相对位置”(在iMacros论坛上的更多信息,我已经多次解释了该原理)来标识和标记并提取(= HTM)完整的“包含” DIV”(或可能是“ SPAN”,但很可能还会有一些(外部)“ DIV”)包含“ FORM”,然后使用“ EVAL”隔离“ qnyfy”部分,例如:
SET !EXTRACT_TEST_POPUP NO
TAG POS=1 TYPE=INPUT:TEXT FORM=ACTION:/pdp/*/resumeSAML50/pdp/startSSO.ping ATTR=CLASS:* EXTRACT=TXT
TAG POS=R-1 TYPE=DIV ATTR=TXT:* EXTRACT=TXT
SET !EXTRACT NULL
TAG POS=R1 TYPE=DIV ATTR=TXT:*&&CLASS:* EXTRACT=HTM
SET Form_ID EVAL("var s='{{!EXTRACT}}'; var x,y,z; x=s.split('ACTION:/pdp/'); y=x[1].split('/'); z=y[0]; z;")
PROMPT EXTRACT:<BR><BR>{{!EXTRACT}}<BR><BR>Form_ID:<SP>_{{Form_ID}}_
6-这个实际上在'4'和'5'之间,这是通过使用'3b'首先在'FORM'及其'包含'DIV'中找到一些锚点 ',则只需要一级“相对定位” ...(并且'EVAL()'语句保持不变...)
就这样...!如果可以识别/添加包含“ DIV”的类别,则将有助于/添加一些“可靠性”。
与iMB v10.3不再相关:
而且,如果“ iMacros v10.3”表示“ iMacros for CR v10.3'免费'”,则您需要使用['!VAR1'-'!VAR3']而不是'Form_ID',因为不支持用户定义的变量在“免费”版本中...
[当然,未测试所有解决方案/脚本...!嗯,我之前已经提到过,我可以直接想到3或4个解决方案,这里已经是6个,啊-啊...!,并且这6个中也有不同的可能变体...]
7-在iMacros论坛上的并行线程中,我还提到并解释了有关使用带有或不带有ID的“ EVENT”模式的Sol_7的情况,因为“ EVENT”模式对于该用户不可用iMB v10.3不支持。
Rmk:
Sol_5和Sol_6实际上可以用于处理动态ID,相同的原理...!
>
我可能有一天必须删除此答案,因为我当前每次(最后)使用我的最后5/5个“ Answer_Credit”时,每次都必须删除一些以前的答案才能发布第5个答案,因为“ iMacros”标签通道上的大多数用户通常永远不会跟进他们的线程,并且不做“ +1”或“接受解决方案” ...,而且我以前所有的答案也通常会因为某些“生气”用户,所以我从来没有通过超过5个答案的阈值,啊-啊...!,tja ...!
(没什么大不了的,因为我实际上从不或非常很少回答SOF上的线程,因为我不喜欢Rep-Pts系统,我之所以仅回答这个问题是因为@OP是我从iMacros那里认识的“好用户”论坛,啊啊...!)
(我仍然不知道在发布答案后,“社区Wiki” CB的含义是什么?)