Что нового

[Сеть, интернет] Как вычислить элемент формы без name и id?

zybaskin

Новичок
Сообщения
12
Репутация
0
в элементе есть класс, прописан тайп и больше ничего, т.е. нэйм есть но он каждый раз разный, поэтому не катит.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
zybaskin
ну так если есть класс, то в чем проблема?используй.
можно, конечно, было поподробнее - с какой программой работаешь
 
Автор
zybaskin

zybaskin

Новичок
Сообщения
12
Репутация
0
вот решил маленькую программу авторегистрации в майл.ру написать, для тренеровочки. Я понимаю что по классу дерзать, может хоть функцию подскажешь и пример ее реализации?)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
zybaskin,
Поиск рулит.
 

eropov

Jury
Сообщения
195
Репутация
25
zybaskin
Я не мог дать вам пример для вашей реализации, вы не указали ни адрес сайта, ни html исходник страницы. Как то так:
Код:
#include <IE.au3>

_IEFormElementSetObjByClass($oIE, 'input', 'input help_inp input_title', 'ТЕКСТ')	

Func _IEFormElementSetObjByClass($oIE, $sTag, $sClass, $sText)
	If IsObj($oIE) = 1 And IsString($sTag) = 1 Then
		Local $Inputs = _IETagNameGetCollection($oIE, $sTag)
		If Not @error And IsObj($Inputs) = 1 Then
			For $Input In $Inputs
				If $Input.classname == $sClass Then
					_IEFormElementSetValue($Input, $sText)
					;MsgBox(1,@error,_IEFormElementSetValue($Input, $sText))
					If Not @error Then
						Return 1
					Else
						SetError(-4)
					EndIf
				Else
					SetError(-3)
				EndIf
			Next
		Else
			SetError(-2)
		EndIf
	Else
		SetError(-1)
	EndIf
EndFunc   ;==>_IEFormElementGetObjByClass
 
Автор
zybaskin

zybaskin

Новичок
Сообщения
12
Репутация
0
madmasles, спасибо в следующий раз воспользуюсь обязательно:smile:

eropov, функции замечательная - работает как надо, еще бы понять как она работает, я бы был очень благодарен если бы ты прокоментировал:smile:

и такой вопрос, как бы For $Input In $Inputs в этом моменте используется переменная $Input но она не инициализирована, и работает. в чем фокус?
 

eropov

Jury
Сообщения
195
Репутация
25
zybaskin
eropov, функции замечательная - работает как надо, еще бы понять как она работает, я бы был очень благодарен если бы ты прокоментировал:smile:
Код:
#include <IE.au3>

_IEFormElementSetObjByClass($oIE, 'input', 'input help_inp input_title', 'ТЕКСТ')  

Func _IEFormElementSetObjByClass($oIE, $sTag, $sClass, $sText)
    If IsObj($oIE) = 1 And IsString($sTag) = 1 Then;
        Local $Inputs = _IETagNameGetCollection($oIE, $sTag);Функция возвращает колекцию найденных объектов по тегу записанному в переменную $sTag
        ;если функция _IETagNameGetCollection отработала правильно то в макрос @error ни чего не запишется и соответсвенно переменная $Inputs будет содержать колекцию обьектов по заданному тегу
		If Not @error And IsObj($Inputs) = 1 Then
            For $Input In $Inputs;В цикле мы перебираем колекцию обьектов тега
                If $Input.classname == $sClass Then;Если класс тега записанный в переменную $sClass равен классу в конструкции $Input.classname то значит это наш тег и мы содержимое этого тега передаем в функцию строчкой ниже
                    _IEFormElementSetValue($Input, $sText)
                    ;MsgBox(1,@error,_IEFormElementSetValue($Input, $sText))
                    If Not @error Then;Если @error пустой то значит функция _IEFormElementSetValue отработала и наша самописная функция вернет 1
                        Return 1
                    Else
                        Return -4
                    EndIf
                Else
                    Return -3
                EndIf
            Next
        Else
            Return -2
        EndIf
    Else
        Return -1;Выдаст -1 если объект IE, не является обьектом или переменная $sTag не строка
    EndIf
EndFunc   ;==>_IEFormElementGetObjByClass

For $Input In $Inputs в этом моменте используется переменная $Input но она не инициализирована, и работает. в чем фокус?

Здесь нет ни какого фокуса, и вообще переменные в ЯП AutoIT можно не декларировать, в данном случае эта переменная автоматически становится локальной.
 
Автор
zybaskin

zybaskin

Новичок
Сообщения
12
Репутация
0
Код:
If $Input.classname == $sClass Then;Если класс тега записанный в переменную $sClass равен классу в конструкции $Input.classname то значит это наш тег и мы содержимое этого тега передаем в функцию строчкой ниже


$Input.classname classname ты из головы брал, или где то этот метод или как он называется в аутоит документирован? вот похожую функцию я могу написать, для поиска по id и использовать $Input.idname или $Input.id?
 
Верх