Автор Тема: Авторизация на сайтах  (Прочитано 58676 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн fortages [?]

  • Новичок
  • *
  • Сообщений: 81
  • Репутация: 3
  • Пол: Женский
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Авторизация на сайтах
« Ответ #30, Отправлен: Сентябрь 10, 2014, 19:11:58 »
C2H5OH это из-за того, что стоит галочка "Запомнить меня" т.е.
Код: AutoIt [Выделить]
$oCheck = _IEGetObjById($oIE, 'rememberMe')

в скрипте?
Извините за глупые вопросы, сегодня вообще первый день как узнала про AutoIT, не разбираюсь еще в нем.

Русское сообщество AutoIt

Re: Авторизация на сайтах
« Ответ #30 Отправлен: Сентябрь 10, 2014, 19:11:58 »

Оффлайн oesoes [?]

  • Новичок
  • *
  • Сообщений: 171
  • Репутация: 9
  • Пол: Мужской
  • xor eax,eax
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Авторизация на сайтах
« Ответ #31, Отправлен: Сентябрь 11, 2014, 03:14:08 »
fortages  [?]
Цитировать
Эта проблема решается если нажать кнопку "Выход" после первого пользователя
Ну а нажать на выход по id кнопки?

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 460
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Авторизация на сайтах
« Ответ #32, Отправлен: Сентябрь 11, 2014, 11:28:35 »
fortages
У вас эта ошибка из за того, что функция $oInputs = _IETagNameGetCollection ($oForm, 'input') не находит на странице тэгов input. В таких ситуациях не нужно сразу использовать цикл For In, т.к он ожидает что ему передали коллекцию объектов или массив.
Сразу после $oInputs = ... добавляете
Код: AutoIt [Выделить]
If Not IsObj($oInputs) Then
    Msgbox(0,0,'Внимание, дальше код выполнять не нужно, т.к нету inputs.')
    ;И здесь делаете либо return из функции, либо exit
Else
    ;а вот здесь - дальнейший код по работе с объектом
    For $oInput In $oInputs
        If $oInput.type = 'submit' And $oInput.value = 'Вход' Then
            _IEAction($oInput, 'click')
            _IELoadWait($oIE)
            ExitLoop
        EndIf
    Next
EndIf
 




Добавлено: Сентябрь 11, 2014, 11:31:14
Еще вот такое oInput.type = 'submit' или такое $oInput.value = 'Вход' сравнение не верно, вам нужно явно преобразовывать в строку
Правильнее написать так:
Код: AutoIt [Выделить]
If String($oInput.type) = 'submit' And String($oInput.value) = 'Вход' Then


Оффлайн fortages [?]

  • Новичок
  • *
  • Сообщений: 81
  • Репутация: 3
  • Пол: Женский
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Авторизация на сайтах
« Ответ #33, Отправлен: Сентябрь 11, 2014, 13:35:57 »
inververs спасибо за подсказку, учту свои ошибки.
После выполнения Вашего кода сообщение с ошибкой пропало. Теперь если не нажать "Выход" и попробовать повторно зайти, то  просто появляется сообщение

А ошибки больше нет. :)


Цитата: oesoes
Ну а нажать на выход по id кнопки?
Ищу примеры работы _IEGetObjById. Вернее даже так:
понимаю, что это будет выглядеть
Код: AutoIt [Выделить]
$oButton = _IEGetObjById($oIE, 'something')
_IEAction($oButton, 'click')
_IELoadWait($oIE)

Но вот значение/параметр something - это что?

 
Если открыть исходный код страницы и поиском пройтись по слову "id=" или "выход", то находится разве что такое:
<a class="mainmenu" href="/login?logout=1&amp;tid=236e9b6a801c366879f53044eafcf89f&amp;key=9a11f6" rel="nofollow" id="logout" ><img id="i_icon_mini_logout" src="http://illiweb.com/fa/yellow/icon_mini_logout_en.gif" border="0"  hspace="0" alt="Выход [ fortages ]" title="Выход [ fortages ]" /></a></td></tr></table>

Вот эта строчка tid=236e9b6a801c366879f53044eafcf89f&amp;key=9a11f6 это не то что нужно?
То есть,
Код: AutoIt [Выделить]
$oButton = _IEGetObjById($oIE, '236e9b6a801c366879f53044eafcf89f')
_IEAction($oButton, 'click')
_IELoadWait($oIE)

Вот так?
Извиняюсь, если спрашиваю что-то глупое...


upd: и для каждого нового пользователя/после нового захода на сайт параметр tid= изменяется...
« Последнее редактирование: Сентябрь 11, 2014, 13:42:20 от fortages »

Русское сообщество AutoIt

Re: Авторизация на сайтах
« Ответ #33 Отправлен: Сентябрь 11, 2014, 13:35:57 »

Оффлайн oesoes [?]

  • Новичок
  • *
  • Сообщений: 171
  • Репутация: 9
  • Пол: Мужской
  • xor eax,eax
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Авторизация на сайтах
« Ответ #34, Отправлен: Сентябрь 11, 2014, 15:12:35 »
попробуйте выходить так:

Код: AutoIt [Выделить]
_IEImgClick ($oIE, "http://illiweb.com/fa/yellow/icon_mini_logout_en.gif")

кликнет по картинке

или так:

Код: AutoIt [Выделить]
$oButton = _IEGetObjById($oIE, 'logout')
...

« Последнее редактирование: Сентябрь 11, 2014, 15:18:08 от oesoes »

Оффлайн fortages [?]

  • Новичок
  • *
  • Сообщений: 81
  • Репутация: 3
  • Пол: Женский
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Авторизация на сайтах
« Ответ #35, Отправлен: Сентябрь 11, 2014, 23:21:08 »
попробуйте выходить так:

Код: AutoIt [Выделить]
_IEImgClick ($oIE, "http://illiweb.com/fa/yellow/icon_mini_logout_en.gif")


Огромнейшее Вам спасибо, oesoes! Вы меня просто спасли :huggles: Все получилось, и заходит, и выходит теперь. Ураа))

Если можно, подскажите пожалуйста, если на двух других сайтах тоже нужно сделать подобное (заходить клонами), но на одном из них (по этому же скрипту) получается заполнить поля Логин/Пароль, но кнопка Вход не нажимается. При наведении на нее мышкой в левом нижнем углу браузера пишет такое:

Поиск в исходном коде страницы по слову "Вход" выдает такое:
<li class="icon-logout"><a href="./ucp.php?mode=login" title="Вход" accesskey="x">Вход</a></li>
<input type="submit" name="login" tabindex="6" value="Вход" class="button1" /></dd>
<form action="./ucp.php?mode=login" method="post" id="login">
    <div id="main_box">
        <div id="top_block">
            <div class="top_left"></div>
            <div class="top_mid">
                <p class="block_title">angraal.org&nbsp;Вход</p>
            </div>

Из этого списка функций (https://www.autoitscript.com/autoit3/docs/libfunctions/IE%20Management.htm) более-менее подходящей кажется  _IELinkClickByText (или _IENavigate?)

На втором форуме вообще авторизоваться можно только после нажатия на ссылку "Вход-регистрация", при наведении мышки на которую в углу пишется в это вообще страшно даже лезть пока, это как раз тот случай, когда ID узнают как-то из js?

Подскажите, пожалуйста, в какую сторону смотреть?

Оффлайн oesoes [?]

  • Новичок
  • *
  • Сообщений: 171
  • Репутация: 9
  • Пол: Мужской
  • xor eax,eax
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Авторизация на сайтах
« Ответ #36, Отправлен: Сентябрь 11, 2014, 23:57:31 »
нужно получить форму с id = "login" функцией $oForm=_IEFormGetObjByName($oIE,'login')  заполнить ее и отправить функцией _IEFormSubmit($oForm). Если использовать _IELinkClickByText или _IENavigate POST данные не передадутся. Вообще при таких вопросах приводят ссылку на страничку, где нужно авторизироваться...
« Последнее редактирование: Сентябрь 12, 2014, 00:19:33 от oesoes »

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2314
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Авторизация на сайтах
« Ответ #37, Отправлен: Сентябрь 12, 2014, 00:03:37 »
oesoes  [?]
Цитировать
получить форму с id = "login" функцией _IEFormGetObjByName($oIE,'login')
Наверное, Вы имели в виду функцию _IEGetObjById()?
Цитировать
_IENavigate POST данные не передадутся
Посмотрите в IE.au3 функцию __IENavigate().

Русское сообщество AutoIt

Re: Авторизация на сайтах
« Ответ #37 Отправлен: Сентябрь 12, 2014, 00:03:37 »

Оффлайн oesoes [?]

  • Новичок
  • *
  • Сообщений: 171
  • Репутация: 9
  • Пол: Мужской
  • xor eax,eax
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Авторизация на сайтах
« Ответ #38, Отправлен: Сентябрь 12, 2014, 00:17:37 »
madmasles  [?]
Цитировать
Посмотрите в IE.au3 функцию __IENavigate().
Не знал ) Это справка меня неверно засправила  :whistle: )) Хотя может у меня и не последняя версия справки  :-\


Цитировать
Наверное, Вы имели в виду функцию _IEGetObjById()?
Не, я именно про _IEFormGetObjByName(), вроде в манах написано, что по и по id умеет ссылку на форму отдавать, не только по имени... Я что-то пропустил наверное?




Добавлено: Сентябрь 12, 2014, 00:21:15
Поправил свой предыдущий пост, а то получается не то там передавал, чем мог ввести в заблуждение, извиняюсь. Я там передавал в _IEFormSubmit ссылку на объект самого контекста IE, а надо же на форму ) Скопировал и не доглядел.

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2314
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Авторизация на сайтах
« Ответ #39, Отправлен: Сентябрь 12, 2014, 00:22:50 »
oesoes  [?]
Цитировать
_IEFormGetObjByName()
Эта функция возвращает дочерние объекты формы по имени, Вы путаете ее с _IEGetObjByName().
« Последнее редактирование: Сентябрь 12, 2014, 01:09:19 от madmasles »

Оффлайн oesoes [?]

  • Новичок
  • *
  • Сообщений: 171
  • Репутация: 9
  • Пол: Мужской
  • xor eax,eax
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Авторизация на сайтах
« Ответ #40, Отправлен: Сентябрь 12, 2014, 00:30:06 »
oesoes  [?]
Цитировать
_IEFormGetObjByName()
Эта функция возвращает дочерние объекты формы по имени, Вы путаете ее с _IEGetObjByName().

Тогда я нифика не пойму, простите зу тупость  :stars: Читаю в справке:

"Returns an object reference to a Form by name" - Возвращает объектную ссылку на форму по имени. И следом пример:

Код: AutoIt [Выделить]
Local $oIE = _IECreate("http://www.google.com")
Local $oForm = _IEFormGetObjByName($oIE, "gbqf")
Local $oQuery = _IEFormElementGetObjByName($oForm, "q")
_IEFormElementSetValue($oQuery, "AutoIt IE.au3")
_IEFormSubmit($oForm)


Сначала чувак получает контекст IE в $oIE, потом ссылку на форму одноименной функцией в переменную с именем $oForm (не даром бы он ее так назвал...). А про то, что Вы говорите идет следом - _IEFormElementGetObjByName (получает элемент управления формы)


Добавлено: Сентябрь 12, 2014, 00:34:37
В справке к _IEGetObjByName() вычитал в примере, что с формами работает идентично, что и _IEFormGetObjByName() - https://www.autoitscript.com/autoit3/docs/libfunctions/_IEGetObjByName.htm


Добавлено: Сентябрь 12, 2014, 00:36:20
madmasles  [?]
Цитировать
Эта функция возвращает дочерние объекты формы по имени
как раз таки _IEFormElementGetObjByName()
« Последнее редактирование: Сентябрь 12, 2014, 00:36:20 от oesoes, Причина: Объединение сообщений »

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2314
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Авторизация на сайтах
« Ответ #41, Отправлен: Сентябрь 12, 2014, 01:07:59 »
oesoes,
Я был не прав, перепутал _IEFormElementGetObjByName() с _IEFormGetObjByName(), извините.  :-[

Оффлайн fortages [?]

  • Новичок
  • *
  • Сообщений: 81
  • Репутация: 3
  • Пол: Женский
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Авторизация на сайтах
« Ответ #42, Отправлен: Сентябрь 12, 2014, 15:56:46 »
Цитата: oesoes
нужно получить форму с id = "login" функцией $oForm=_IEFormGetObjByName($oIE,'login') 
заполнить ее и отправить функцией _IEFormSubmit($oForm).

Есть такая строчка в коде. Id формы, вроде бы, получила. Поля логин/пароль заполняются.
Но если сразу после строчек
Код: AutoIt [Выделить]
_IEFormElementSetValue($oLogin, $sLogin)
_IEFormElementSetValue($oPass, $sPass)

дописать _IEFormSubmit($oForm), то происходит следующее:
открывается страница, заполняются поля, но после этого она обновляется и открывается уже с пустыми полями логин/пароль

_IEFormSubmit($oForm)  пробовала, описала реакцию выше.
_IELinkClickByText($oIE, "Вход") - аналогично, куда-то нажимает и возвращает форму с незаполненными полями
_IENavigate($oIE, "http://site.org/ucp.php?mode=login") то же самое

Уже думаю, а не нажимает ли оно на верхнюю ссылку "Вход", которая расположена над формой? Тогда понятно, почему после выполнения идет пустая форма...

Если смотреть поиском, то
<a href="./ucp.php?mode=login">Вход</a>&nbsp; &bull; &nbsp;<a href="./ucp.php?mode=register">Регистрация</a></h3>
<fieldset class="quick-login">
<label for="username">Имя пользователя:</label>&nbsp;<input type="text" name="username" id="username" size="10" class="inputbox" title="Имя пользователя" /> 
<label for="password">Пароль:</label>&nbsp;<input type="password" name="password" id="password" size="10" class="inputbox" title="Пароль" />

| <label for="autologin">Автоматически входить при каждом посещении <input type="checkbox" name="autologin" id="autologin" /></label>

<input type="submit" name="login" value="Вход" class="button2" />
<input type="hidden" name="redirect" value="./index.php?" />
Кнопка находится под чекбоксом "Входить автоматически", а значит информация про кнопку - две последние строчки, правильно?

<input type="submit" name="login" value="Вход" class="button2" />
<input type="hidden" name="redirect" value="./index.php?" />

Ведь надо, чтоб совпали type="submit"  + name="login" + value="Вход"?
После добавления вот этого куска кода

Код: AutoIt [Выделить]
$oInputs = _IETagNameGetCollection ($oForm, 'input')
For $oInput In $oInputs
    If $oInput.type = 'submit' And $oInput.value = 'Вход' Then
        _IEAction($oInput, 'click')
        _IELoadWait($oIE)
        ExitLoop
    EndIf
Next



Вход получился)))
Осталось выйти теперь)

Смотрю исходный код страницы

                     
               <li class="icon-logout"><a href="./ucp.php?mode=logout&amp;sid=a2d1e2df64b523905351617319c6bc0e" title="Выход [ fortages ]" accesskey="x">Выход [ fortages ]</a></li>
Вот этот sid=a2d1e2df64b523905351617319c6bc0e для каждого пользователя будет меняться ведь.
Зато есть ссылка ./ucp.php?mode=logout, если сделать на нее _IENavigate($oIE, "http://site.org/ucp.php?mode=logout"), то получается ошибка

Цитировать
Информация
Вы не вышли из форума, так как запрос не соответствовал параметрам Вашей сессии. Если проблема повторится, свяжитесь с администратором форума.
Вернуться на главную страницу

Сейчас сижу думаю, как выйти...


Используйте для AutoIt кода тег [autoit]
madmasles.
« Последнее редактирование: Сентябрь 12, 2014, 17:55:42 от madmasles »

Оффлайн oesoes [?]

  • Новичок
  • *
  • Сообщений: 171
  • Репутация: 9
  • Пол: Мужской
  • xor eax,eax
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Авторизация на сайтах
« Ответ #43, Отправлен: Сентябрь 12, 2014, 18:46:08 »
fortages  [?]
Цитировать
Сейчас сижу думаю, как выйти...
Я бы попробовал семулировать клик по этой ссылке, тогда и за sid не надо будет каждый раз следить.

Код: AutoIt [Выделить]
_IELinkClickByText ($oIE, "Выход [")


так же там присутствует атрибут accesskey="x", это значит, что при нажатии на Alt+x на клавиатуре будет происходить выход. Попробуйте.  :think:

Оффлайн fortages [?]

  • Новичок
  • *
  • Сообщений: 81
  • Репутация: 3
  • Пол: Женский
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Авторизация на сайтах
« Ответ #44, Отправлен: Сентябрь 13, 2014, 00:42:49 »
Все решилось добавлением такого куска
Код: AutoIt [Выделить]
$sMyString = "Выход"
$oLinks = _IELinkGetCollection($oIE)
For $oLink In $oLinks
    $sLinkText = _IEPropertyGet($oLink, "innerText")
    If StringInStr($sLinkText, $sMyString) Then
        _IEAction($oLink, "click")
        ExitLoop
    EndIf
Next

  :IL_AutoIt_1:
А вот  accesskey не хотят в упор работать, уже со всех браузеров пыталась.

Все работает, все отлично, спасибо:)

А если можно, подскажите, можно ли как-то выбирать значение $sLogin и $sPass из файла?
Просто сейчас получается так, что у меня

кусок кода
;
;
;
кусок кода
;
;
;

И прямо в коде указаны разные логины/пароли. Неудобно. Открывает для каждого нового логина окно. :stars:

Русское сообщество AutoIt

Re: Авторизация на сайтах
« Ответ #44 Отправлен: Сентябрь 13, 2014, 00:42:49 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
4179 Просмотров
Последний ответ Апрель 11, 2011, 22:17:33
от Sergey2210
0 Ответов
2722 Просмотров
Последний ответ Ноябрь 20, 2011, 22:13:27
от madmasles
19 Ответов
9655 Просмотров
Последний ответ Декабрь 19, 2014, 17:49:49
от CreatoR
0 Ответов
2832 Просмотров
Последний ответ Июнь 30, 2012, 13:45:14
от Kreol2013
1 Ответов
2022 Просмотров
Последний ответ Июнь 28, 2013, 09:40:04
от madmasles
1 Ответов
2174 Просмотров
Последний ответ Июль 01, 2013, 09:31:57
от C2H5OH
13 Ответов
4324 Просмотров
Последний ответ Февраль 12, 2014, 08:55:54
от madmasles
5 Ответов
1753 Просмотров
Последний ответ Март 12, 2015, 12:57:13
от edyapd
2 Ответов
1231 Просмотров
Последний ответ Август 05, 2015, 13:11:38
от ckret
3 Ответов
2257 Просмотров
Последний ответ Март 11, 2017, 10:31:29
от DOMINANT