Что нового

Заполнение рег. формы на mail.ru

astati

Новичок
Сообщения
145
Репутация
4
Привет! Надеюсь название темы сойдет.
Писал рег на маил.ру все работает кроме одного форма не заполняется.
Код:
$oForm = _IEFormGetCollection ($oIE,0)
$oQuery = _IEFormElementGetObjByName ($oForm, "x_600b8cff583a42a0")
_IEFormElementSetValue ($oQuery, GUICtrlRead($input1))
$oQuery = _IEFormElementGetObjByName ($oForm, "x_c39eb268659886ae")
_IEFormElementSetValue ($oQuery, GUICtrlRead($input1))
$oQuery = _IEFormElementGetObjByName ($oForm, "x_a121402550175622")
_IEFormElementSetValue ($oQuery, "1") ;GUICtrlRead($Combo1)
$oQuery = _IEFormElementGetObjByName ($oForm, "BirthMonth")
_IEFormElementSetValue ($oQuery, "Январь") ;GUICtrlRead($Combo2)
$oQuery = _IEFormElementGetObjByName ($oForm, "x_f5aefa6247676d4a")
_IEFormElementSetValue ($oQuery, "1990") ;GUICtrlRead($Combo3)
$oQuery = _IEFormElementGetObjByName ($oForm, "x_552a15fe509bc309")
_IEFormElementSetValue ($oQuery, "1")
$oQuery = _IEFormElementGetObjByName ($oForm, "x_7b46963977ff8365")
_IEFormElementSetValue ($oQuery, GUICtrlRead($input1) & "777")
$oQuery = _IEFormElementGetObjByName ($oForm, "x_8d27993493851c55")
_IEFormElementSetValue ($oQuery, GUICtrlRead($input2))
$oQuery = _IEFormElementGetObjByName ($oForm, "x_05d168391ed32fb6")
_IEFormElementSetValue ($oQuery, GUICtrlRead($input2))

Html код:(пример)
Код:
<span class="sig1">Имя</span>
		<span class="sig2"><input name="x_92add3ba298ae054" value="" type="text" class="inPut" maxlength="40" onclick="return {'maxLength': '40', 'maxLengthText': 'Имя содержит слишком много символов', 'format': '^[^\\x00-\\x1F\\x22\\x3C\\x3E\\x26\\x3A]*$', 'formatText': 'Некорректное имя'};"/></span>
Понял, что названия обьектов не статичны.("x_8d27993493851c55")
Но как к ним подобраться вообще не могу понять.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
astati,
Имя и фамилия.
Код:
#include <IE.au3>

$iCount = 0
Dim $aReg[3][2] = [[2],['vmi tac mb14 t0 vt sig-example-on', 'Вася'],['vmi tac mb14 t0 vt', 'Пупкин']]
$oIE = _IECreate('http://e.mail.ru/cgi-bin/signup')

$oForm = _IEGetObjById($oIE, 'registrationForm')
$oDivs = _IETagNameGetCollection($oForm, 'div')
For $oDiv In $oDivs
	For $i = 1 To $aReg[0][0]
		If $oDiv.classname == $aReg[$i][0] Then
			ConsoleWrite($oDiv.innertext & @LF)
			$oInput = _IETagNameGetCollection($oDiv, 'input', 0)
			_IEFormElementSetValue($oInput, $aReg[$i][1])
			If Not @error Then $iCount += 1
		EndIf
	Next
	If $iCount >= $aReg[0][0] Then ExitLoop
Next
;...


А так еще проще.
Код:
#include <IE.au3>

$iCount = 0
Dim $aReg[3][2] = [[2],['Имя', 'Вася'],['Фамилия', 'Пупкин']]
$oIE = _IECreate('http://e.mail.ru/cgi-bin/signup')

$oForm = _IEGetObjById($oIE, 'registrationForm')
$oDivs = _IETagNameGetCollection($oForm, 'div')
For $oDiv In $oDivs
	For $i = 1 To $aReg[0][0]
		If StringRegExp($oDiv.innertext, '^' & $aReg[$i][0]) Then
			ConsoleWrite($oDiv.innertext & @LF)
			$oInput = _IETagNameGetCollection($oDiv, 'input', 0)
			_IEFormElementSetValue($oInput, $aReg[$i][1])
			If Not @error Then $iCount += 1
		EndIf
	Next
	If $iCount >= $aReg[0][0] Then ExitLoop
Next
;...
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
а для всех полей мож написать. буду очень признателен.

P.S. ток не для мобилы снизу возьми а секрет вопрос. :smile:


Добавлено:
Сообщение автоматически объединено:

Так вот что пока получилось.
знаю знаю немного тупо.
Но пока не допер как заполнить: пароль, секретный ответ на вопрос, год и день рождения.
Код:
$sUrl = 'http://e.mail.ru/cgi-bin/signup'
$oIE  = _IECreateEmbedded()
$hEmbed_GUI = GuiCreate("_IECreateEmbedded", 700, 700)
$sPic1 = GUICtrlCreateObj($oIE, 3, 3, 700, 700)
GUISetState();@SW_HIDE)
_IENavigate ($oIE, $sUrl)



;~ =====================================================================

$iCount = 0
Dim $aReg[3][2] = [[2],['vmi tac mb14 t0 vt sig-example-on', 'Вася'],['vmi tac mb14 t0 vt', 'Пупкин']]
;$oIE = _IECreate('http://e.mail.ru/cgi-bin/signup')

$oForm = _IEGetObjById($oIE, 'registrationForm')
$oDivs = _IETagNameGetCollection($oForm, 'div')
For $oDiv In $oDivs
    For $i = 1 To $aReg[0][0]
        If $oDiv.classname == $aReg[$i][0] Then
            ConsoleWrite($oDiv.innertext & @LF)
            $oInput = _IETagNameGetCollection($oDiv, 'input', 0)
            _IEFormElementSetValue($oInput, $aReg[$i][1])
            If Not @error Then $iCount += 1
        EndIf
    Next
    If $iCount >= $aReg[0][0] Then ExitLoop
	Next
	$iCount = 0
;~ ----------------------------------------------------------------------------------------------------	
Dim $aReg[3][2] = [[2],['pRel vmi tac mb14 t0 vt login-field', 'Вася'],['', '']]
;$oIE = _IECreate('http://e.mail.ru/cgi-bin/signup')

$oForm = _IEGetObjById($oIE, 'registrationForm')
$oDivs = _IETagNameGetCollection($oForm, 'div')
For $oDiv In $oDivs
    For $i = 1 To $aReg[0][0]
        If $oDiv.classname == $aReg[$i][0] Then
            ConsoleWrite($oDiv.innertext & @LF)
            $oInput = _IETagNameGetCollection($oDiv, 'input', 0)
            _IEFormElementSetValue($oInput, $aReg[$i][1])
            If Not @error Then $iCount += 1
        EndIf
    Next
    If $iCount >= $aReg[0][0] Then ExitLoop
	Next
	
$Das = _IEGetObjById($oForm, "man1")
_IEAction ($Das, "click")
$oQuery = _IEFormElementGetObjByName ($oForm, "BirthMonth")
_IEFormElementSetValue ($oQuery, "1")
$oQuery = _IEFormElementGetObjByName ($oForm, "Password_Question")
_IEFormElementSetValue ($oQuery, "Девичья фамилия матери")
$Das = _IEGetObjById($oForm, "noPhoneLink")
_IEAction ($Das, "click")


Помогите дописать.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
astati,
Код:
#include <IE.au3>
;без проверок на ошибки и на существование ящика

$sEMail = 'vas_pup' & Random(10000, 100000, 1)
Dim $aName[7][2] = [[6],['Имя', 'Вася'],['Фамилия', 'Пупкин'],['Пароль', '123456789'], _
		['Повторите', '123456789'],['Ответ', 'Пупкина'],['Почтовый ящик', $sEMail]], _
		$Date[4][2] = [[3],['день', '30'],['месяц', 'Январь'],['год', '1980']], _
		$iSex = 1, _ ;(1-мужской, 2-женский)
		$sQues = 'Девичья фамилия матери'

$oIE = _IECreate('http://e.mail.ru/cgi-bin/signup')
$oForm = _IEGetObjById($oIE, 'registrationForm')
$oSelects = _IETagNameGetCollection($oForm, 'select')
$iCount = 0
For $oSelect In $oSelects
	For $i = 1 To $Date[0][0]
		If StringRegExp($oSelect.innertext, '^\h' & $Date[$i][0]) Then
			_IEAction($oSelect, 'focus')
			_IEFormElementOptionSelect($oSelect, $Date[$i][1], 1, 'byText')
			If Not @error Then $iCount += 1
		EndIf
	Next
	If $iCount >= $Date[0][0] Then ExitLoop
Next
_IEFormElementRadioSelect($oForm, $iSex - 1, 'man' & $iSex, 1, 'byIndex')
_IELinkClickByText($oIE, 'У меня нет мобильного телефона')
$oQues = _IEFormElementGetObjByName($oForm, 'Password_Question')
_IEFormElementOptionSelect($oQues, $sQues)
$oDomain = _IEFormElementGetObjByName($oForm, 'RegistrationDomain')
_IEFormElementOptionSelect($oDomain, 'list.ru')
$iCount = 0
$oDivs = _IETagNameGetCollection($oForm, 'div')
For $oDiv In $oDivs
	For $i = 1 To $aName[0][0]
		If StringRegExp($oDiv.innertext, '^' & $aName[$i][0]) Then
			$oInput = _IETagNameGetCollection($oDiv, 'input', 0)
			_IEAction($oInput, 'focus')
			_IEFormElementSetValue($oInput, $aName[$i][1])
			If Not @error Then $iCount += 1
		EndIf
	Next
	If $iCount >= $aName[0][0] Then ExitLoop
Next
;_IEFormSubmit($oForm)
 
Автор
A

astati

Новичок
Сообщения
145
Репутация
4
Вау все робит. Ты как всегда выше всяких похвал :smile:
 
Верх