Получить имя формы из iframe с помощью AutoIt

Я использую 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")

2 ответов


Я получил этот ответ от форума AutoIt здесь

есть два кадра, и форма находится во втором кадре, поэтому используйте $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"

вы используете неправильную функцию для получения объекта формы... _IEForm*элемент * GetObjByName предназначен для подэлементов формы. Вместо этого следует использовать функцию _IEFormGetObjByName.