使用 AutoIt 从 iframe 获取表单名称

Posted

技术标签:

【中文标题】使用 AutoIt 从 iframe 获取表单名称【英文标题】:Get form name from iframe using AutoIt 【发布时间】:2011-09-06 10:28:35 【问题描述】:

我正在使用AutoIt 自动填写网站上的表格。

但我在从网站获取表单名称时遇到问题。我查看了 html 的源代码并找到了表单及其名称,但我仍然收到 IEStatus_noMatch 错误。

有没有更简单的方法来获取表单名称或如何找到它?

对于对象,我可能会遇到同样的问题。

$sUrl = "https://www.acgme.org/residentdatacollection/login.asp"
$oIE = _IEAttach($sUrl, "url")
If not isObj($oIE) Then
    $oIE = _IECreate()
    _IENavigate($oIE, $sUrl)
EndIf

; Get pointers to the login form and username and password fields
$o_form = _IEFormGetObjByName($oIE, "loginentry")
$o_login = _IEFormElementGetObjByName($o_form, "USERID")
$o_password = _IEFormElementGetObjByName($o_form, "PASSW")

【问题讨论】:

【参考方案1】:

我从 AutoIt 论坛here得到这个答案

有两个框架,表单在第二个框架中,所以使用$o_frame = _IEFrameGetCollection($oIE, 1) 来获取第二个框架(索引 1 是第二个框架,索引 0 是第一个)。

然后使用以下命令从框架中获取表单:$o_form = _IEFormGetObjByName($o_frame, "loginentry")

所以你的代码部分看起来像:

; get pointers to the login form and username and password fields
$o_frame = _IEFrameGetCollection($oIE, 1)
$o_form = _IEFormGetObjByName($o_frame, "loginentry")

$o_login = _IEFormElementGetObjByName($o_form, "USERID")
$o_password = _IEFormElementGetObjByName($o_form, "PASSW")

USERID 和 PASSW 是隐藏字段,因此您不会看到它们已填写。如果表单未正确提交,请使用可见字段名称:

$o_login = _IEFormElementGetObjByName($o_form, "posterior")
$o_password = _IEFormElementGetObjByName($o_form, "fossa"

【讨论】:

【参考方案2】:

您使用了错误的函数来获取表单对象... _IEForm*Element*GetObjByName 用于表单子元素。您应该改用 _IEFormGetObjByName 函数。

【讨论】:

这是一个很好的答案,但是......它实际上并没有解决问题。我已经做出改变了。但我仍然得到 $_IEStatus_NoMatch 与示例中的网站。

以上是关于使用 AutoIt 从 iframe 获取表单名称的主要内容,如果未能解决你的问题,请参考以下文章

如何从表单获取输入框值到iframe?

使用 javascript 从指向不同域的 iframe 中获取选定的文本

用Excel中的vba获取网页内容填写网页表单

如何将数据从一个表单发布到另一个 iFrame 表单

(求思路)autoit3或者VBS怎么么实现点击IE内的TABLE表格中的链接

获取不同域中的iframe父名称[重复]