Что нового

[Сеть, интернет] Как получить объекты формы если у неё нет ни имени, ни id ?

goodmax

Новичок
Сообщения
4
Репутация
0
Доброго времени суток!

Мой стаж в AutoIT равен двум суткам. Прошу вашей помощи.

Надо заполнить поля авторизации на сайте и нажать кнопку "Войти". Сложность в том, что у формы нет ни имени, ни id. Перерыл на форуме кучу всего, пробовал, пробовал...

Как пример - код формы:
Код:
<form method="post" action="" onsubmit="AjaxLogin(this); return false;" class="login">
    <h1>Вход</h1>
    <dl>
        <dt>
            <label for="login_login">Логин:</label>
        </dt>
        <dd>
            <input type="text" id="login_login" name="login" value="" class="radius3" />
        </dd>

        <dt>
            <label for="login_password">Пароль:</label>
        </dt>
        <dd>
            <input type="password" id="login_password" name="password" value="" class="radius3" />
            <span class="error radius3" style="visibility: hidden"></span>
        </dd>

        <dd class="login_submit">
            <div class="radius3">
                <p>
                    <input id="remember_" type="checkbox" name="remember" value="on" checked="checked" />
                    <label for="remember_">Запомнить меня</label>
                </p>
                <input type="submit" value="Войти" />
                <input type="hidden" value="" name="back" />

            </div>
        </dd>
    </dl>
</form>

Пытаюсь что-то сделать...
Код:
#include <IE.au3>
Global $sLogin = "pupkin"
Global $sPassword = "777"

_IELoadWaitTimeout(10000)

$oIE = _IECreate("адрес сайта")

; Вот тут я не знаю как получить элементы формы

$oLogin = _IEGetObjByName($oForm, "username")
_IEFormElementSetValue($oLogin, $sLogin)

$oPassword = _IEGetObjByName($oForm, "password")
_IEFormElementSetValue($oPassword, $sPassword)

_IEFormSubmit($oForm, 0)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
У формы есть индекс, обращайтесь по индексу.
Код:
_IEFormGetCollection($oIE, $index)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
goodmax,
Или попробуйте сделать примерно так.
Код:
#include <IE.au3>
;~ Без проверок на ошибки!!!
Global $sLogin = 'pupkin', $sPassword = '777', $oIE, $oForms, $oForm, $oLogin, $oPassword

$oIE = _IECreate('адрес сайта')
$oForms = _IEFormGetCollection($oIE)
For $oTmp In $oForms
	If $oTmp.ClassName == 'login' Then
		$oForm = $oTmp
		ExitLoop
	EndIf
Next

$oLogin = _IEFormElementGetObjByName($oForm, 'login')
_IEFormElementSetValue($oLogin, $sLogin)
$oPassword = _IEFormElementGetObjByName($oForm, 'password')
_IEFormElementSetValue($oPassword, $sPassword)
_IEFormSubmit($oForm)
 
Автор
goodmax

goodmax

Новичок
Сообщения
4
Репутация
0
madmasles сказал(а):
goodmax,
Или попробуйте сделать примерно так.

Логин и пароль вставляются, но по нажатию кнопки вход не происходит, а поля очищаются.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
goodmax [?]
но по нажатию кнопки вход не происходит, а поля очищаются.
А так?
Код:
#include <IE.au3>
;~ Без проверок на ошибки!!!
Global $sLogin = 'pupkin', $sPassword = '777', $oIE, $oForms, $oForm, $oLogin, $oPassword

$oIE = _IECreate('адрес сайта')
$oForms = _IEFormGetCollection($oIE)
For $oTmp In $oForms
	If $oTmp.ClassName == 'login' Then
		$oForm = $oTmp
		ExitLoop
	EndIf
Next

$oLogin = _IEFormElementGetObjByName($oForm, 'login')
_IEFormElementSetValue($oLogin, $sLogin)
$oPassword = _IEFormElementGetObjByName($oForm, 'password')
_IEFormElementSetValue($oPassword, $sPassword)
$oForms = _IETagNameGetCollection($oForm, 'input')
For $oTmp In $oForms
	If $oTmp.Type == 'submit' And $oTmp.Value == 'Войти' Then
		_IEAction($oTmp, 'Click')
		_IELoadWait($oIE)
		ConsoleWrite('OK' & @LF)
		ExitLoop
	EndIf
Next
 
Верх