Что нового

[Сеть, интернет] Автоматический вход на сайт(не могу найти Login)

unKn0wn

Новичок
Сообщения
4
Репутация
0
Здравствуйте. Решил написать небольшую автоматизацию, но сперва хотел бы немного освоиться с autoit т.е. начать с малого, сделать автоматический вход на сайт, но так как знаний очень мало -решил воспользоваться наработками с форума, и естественно столкнулся с проблемой:

Код:
                          <h2 id="HeaderLogin"><span>Member Login</span></h2>
              <form id="LoginForm" action="member.php" method="post">
                <table border="0" cellspacing="0" cellpadding="1" align="center">
                  <tfoot>
                    <tr>
                      <td style="text-align: right;"><input id="RememberCheckbox" type="checkbox" name="rememberme" value=1/></td><td style="text-align: left;">Запомнить меня</td>
                    </tr>
                    <tr>
                      <td colspan="2"><input id="LoginButton" name="imageField" value="Вход" type="submit"></td>
                    </tr>
                    <tr>
                      <td colspan="2"><a href="forgot.php">Забыли пароль?</a></td>
                    </tr>
                  </tfoot>
                  <tbody>
                    <tr>
                      <td><b>Ник/Email</b></td>
                      <td><input type="text" name="ID" /></td>
                    </tr>
                    <tr>
                      <td><b>пароль</b></td>
                      <td><input type="password" name="Password" /></td>
                    </tr>
                  </tbody>
                </table>
              </form>
              <h2 id="HeaderRegister">Become a Member</h2>
              <div id="RegisterDiv">
                <p>You can register and become a member. It's completely <span>FREE</span>.</p>

Нашел всё, что нужно, но почему-то не хочет работать с "логином".

Код:
#include <IE.au3>

$sLogin = 'awesome'
$sPass = '11111'
$sUrl = 'http://www.natashaclub.com/'

$oIE = _IECreate($sUrl)
_IELinkClickByText ($oIE, "Русский")
$oLogin = _IEGetObjById($oIE, 'ID')
$oPass = _IEGetObjByName($oIE, 'Password')
$oButton = _IEGetObjById($oIE, 'LoginButton')

_IEFormElementSetValue($oLogin, $sLogin)
_IEFormElementSetValue($oPass, $sPass)


_IEAction($oButton, 'click')
_IELoadWait($oIE)

Как я понял, проблема в значение "name="ID"" слишком не уникальное для страницы..
 

madmasles

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

$oIE = _IECreate(@ScriptDir & '\1.html');Ваша ссылка
$oForm = _IEGetObjById($oIE, 'LoginForm')
$oEmail = _IEFormElementGetObjByName($oForm, 'ID')
$oPass = _IEFormElementGetObjByName($oForm, 'Password')
_IEFormElementSetValue($oEmail, '[email protected]')
_IEFormElementSetValue($oPass, '12345')
_IEFormSubmit($oForm)
 
Автор
U

unKn0wn

Новичок
Сообщения
4
Репутация
0
Спасибо большое. А можно немного подробностей ? :smile: Почему у меня не получилось, почему с другой функцией надо было?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
unKn0wn [?]
Почему у меня не получилось, почему с другой функцией надо было?
ИМХО, Вы невнимательно читали код страницы. Вот тот же пример с комментариями:
Код:
#include <IE.au3>

$sLogin = 'Вася'
$sPass = 'Пупкин'
$sUrl = 'http://www.natashaclub.com/index.php?Language=Russian';ИМХО, проще сразу открывать страницу на русском языке

$oIE = _IECreate($sUrl)
If @error Then Exit 13
For $i = 1 To 1
	$oForm = _IEGetObjById($oIE, 'LoginForm');ищем форму авторизации (обычно авторизация проходит через форму)
	If @error Then ExitLoop
	;код страницы: <form id="LoginForm"...
	;остальные элементы находятся внутри этой формы:
	$oEmail = _IEFormElementGetObjByName($oForm, 'ID');код страницы: <input type="text" name="ID"...
	If @error Then ExitLoop
	$oPass = _IEFormElementGetObjByName($oForm, 'Password');код страницы: <input type="password" name="Password"...
	If @error Then ExitLoop
	_IEFormElementSetValue($oEmail, $sLogin);заполняем поля
	If @error Then ExitLoop
	_IEFormElementSetValue($oPass, $sPass);заполняем поля
	If @error Then ExitLoop
	;Запомнить меня:
	_IEFormElementCheckBoxSelect($oForm, '1/', 'rememberme');код страницы: <input id="RememberCheckbox" type="checkbox" name="rememberme" value=1/>...
	If @error Then ExitLoop
	_IEFormSubmit($oForm);отправляем данные
	If @error Then ExitLoop
Next
If @error Then
	_IEQuit($oIE)
	Exit 13
Else
	;здесь я бы еще проверил правильность авторизации по тексту какого-либо элемента
	MsgBox(64, 'Info', 'OK')
EndIf
 
Автор
U

unKn0wn

Новичок
Сообщения
4
Репутация
0
Ещё раз спасибо, свою ошибку понял :smile: Блин, жаль, что нет в таком виде инфы на Autoit которая есть для autohotkey... Там я даже с нулевыми знаниями научился писать хоть и элементарные но всё-же срипты для автоматизации, а в описаниях для Autoit функций не могу понять значения функций, наверное описание строилось с расчётом на уже имеющиеся знания)
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
unKn0wn [?]
в описаниях для Autoit функций не могу понять значения функций, наверное описание строилось с расчётом на уже имеющиеся знания)
OffTopic:
Разве что на самые базовые о алгоритмизации
 

vladimir_v_m80

Новичок
Сообщения
4
Репутация
0
madmasles
А если нет
;код страницы: <form id="LoginForm"...
, а есть только:

Код:
<form method="post" action="/lc/auth/" class="ab-login-form">

              
              <dl class="control-unit">
                <dt class="label">
                  Логин
                </dt>
                <dd class="unit">
                  <input type="text" class="text" id="login" name="login" value="">
                </dd>
              </dl>

              <dl class="control-unit _last">
                <dt class="label">
                  Пароль
                </dt>
                <dd class="unit">
                  <input type="password" class="text" id="pass" name="pass" value=""><a  b n/l/
Как быть?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
vladimir_v_m80,

Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Глобальный модератор.
 

vladimir_v_m80

Новичок
Сообщения
4
Репутация
0
inververs сказал(а):
vladimir_v_m80 [?]
заполнить name="login" и name="pass" и выполнить _IEFormSubmit
У меня такой код, хочу сопоставить с этим, но у меня не срабатывает:

Код:
#include <IE.au3>
$Url = "http://мой сайт/lc/login/"
$User = 'user'
$Pwd = 'pwd'
$test = _IEAutoLogin($Url, $User, $Pwd)

Func _IEAutoLogin($sUrl, $sUsername, $sPwd)
$oIE = _IECreate ($Url) 
$oForm = _IEFormGetObjByName ($oIE, 1) 
$oQuery1 = _IEFormElementGetObjByName ($oForm, "login") 
$oQuery2 = _IEFormElementGetObjByName ($oForm, "pass") 
$uname="login" 
$pwd="pass" 
_IEFormElementSetValue ($oQuery1,$uname) 
_IEFormElementSetValue ($oQuery2,$pwd) 
$oButton = _IEFormElementGetObjByName($oForm, "button-change")
_IEAction ($oButton, "click") 
Sleep(8000)
_IENavigate ($oIE, "http://мой сайт/lc/catalog/?city_id=0")
$i=0
Local $oInputs = _IETagNameGetCollection($oIE, "click")
For $oInput In $oInputs
    If $oInput.classname = "ma-submit" and $i=0 Then _IEAction($oInput, "client.services.update.updateAllAdverts(event); return false;")
    If $oInput.classname = "ma-submit"  Then $i=1
Next
Sleep(40000)
_IENavigate ($oIE, "http://мой сайт/lc/logout/")
_IEQuit($oIE)
EndFunc
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,580
Репутация
335
vladimir_v_m80 [?]
У меня такой код, хочу сопоставить с этим, но у меня не срабатывает
Подозреваю, что Вы путаетесь с переменными.

Код:
#include <IE.au3>

$Base_Url = "http://мой сайт/lc"
$User = 'user'
$Pwd = 'pwd'
$test = _IEAutoLogin($Base_Url, $User, $Pwd)

Func _IEAutoLogin($_sUrl, $_sUsername, $_sPwd)
	Local $iIndex = 0
	Local $oInputs, $oButton, $oIE, $oForm, $oLogin, $oPasswd
	
	$oIE = _IECreate($_sUrl & "/login/")
	$oForm = _IEFormGetObjByName($oIE, 0)
	$oLogin = _IEFormElementGetObjByName($oForm, "login")
	$oPasswd = _IEFormElementGetObjByName($oForm, "pass")

	_IEFormElementSetValue($oLogin, $_sUsername)
	_IEFormElementSetValue($oPasswd, $_sPwd)
	$oButton = _IEFormElementGetObjByName($oForm, "button-change")
	_IEAction($oButton, "click")
	Sleep(8000)
	_IENavigate($oIE, $_sUrl & "/catalog/?city_id=0")

	$oInputs = _IETagNameGetCollection($oIE, "click")
	For $oInput In $oInputs
		If $oInput.classname = "ma-submit" And $iIndex = 0 Then _
				_IEAction($oInput, "client.services.update.updateAllAdverts(event); return false;")
		If $oInput.classname = "ma-submit" Then $iIndex = 1
	Next
	Sleep(40000)
	_IENavigate($oIE, $_sUrl & "/logout/")
	_IEQuit($oIE)
EndFunc   ;==>_IEAutoLogin
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
vladimir_v_m80 [?]
Как программно обновить товар
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 
Верх