Что нового

Авторизация на сайтах

ivanius

Знающий
Сообщения
74
Репутация
5
сейчас мне помогли, в этой ветке хочу внести свою лепту т.к. есть намного более быстрый, удобный и при этом чуть более сложный способ (пользуюсь им более года, но на других языках):
1)Проделать действия в браузере (к примеру залогинится) - при этом смотреть что тебе пишет ctrl+shift+I (во всех браузерах, вкладка Network)
2)Найти POST запрос который отправляет браузер посмотреть на него и переписать нужные нам данные
3)Выполнить эти-же действия с помощью AutoIT примерно так:
Код:
$HTTP.Option(6) = False ;WinHttpRequestOption_EnableRedirects
	$HTTP.Open("POST", $Host&"/login.php")
	$HTTP.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
	$HTTP.SetRequestHeader("Accept-Encoding", "deflate")
	$HTTP.SetRequestHeader("Cache-Control", "max-age=0")
	$HTTP.SetRequestHeader("Connection", "keep-alive")
	$HTTP.SetRequestHeader("Content-Length", StringLen($Data))
	$HTTP.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
	$HTTP.SetRequestHeader("Host", $Host)
	;$HTTP.SetRequestHeader("Cookie", "") ;если нужно отправляем еще и куки
	$HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36")
	$HTTP.Send($Data)
	$HTTP.WaitForResponse
	;ClipPut($HTTP.ResponseText);Debug
	;GUICtrlSetData($Results, $HTTP.Status & @CRLF & $HTTP.GetAllResponseHeaders);Debug
	$Cookies = StringRegExp($HTTP.GetAllResponseHeaders,"SSID=(.*?);", 1)

Получили куки нашей сесси на сайте и просто при последующих GET запросах используем их:
Код:
$HTTP.Open("GET", $Host&"/login.php")
$HTTP.SetRequestHeader("Cookie", $Cookies)
$HTTP.Send()
$HTTP.WaitForResponse
$ResponseData = $HTTP.ResponseText;HTML Код страницы

Может кому пригодится
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вся это затея с куками нужна лишь для того, что бы их сохранить и затем использовать.
А отключение автоматического редиректа обычно нужно для получения ссылки на ресурс.
К авторизации это мало относится.
Вы все равно должны знать адрес, метод и отсылаемые данные, поэтому этот код подходит только под какой то конкретный сайт.
Есть более удобные способы работать с http, не трогая com. Смотри в моей подписи.
 

Alkaris

Новичок
Сообщения
9
Репутация
0
madmasles сказал(а):
Pupsik,
Попробуйте сделать так.
Код:
#include <IE.au3>

;...
$oInputs = _IETagNameGetCollection ($oForm, 'input');$oForm получен ранее
For $oInput In $oInputs
	If $oInput.type = 'submit' And $oInput.value = 'Войти' Then
		_IEAction($oInput, 'click')
		_IELoadWait($oIE)
		ExitLoop
	EndIf
Next
;...

Посмотрите, пожалуйста, что не так. Тоже надо авторизироваться на http://www.mist-game.ru/
Код:
#include <IE.au3>
$oIE = _IECreate ("http://world.mist-game.ru/")
$pass = 'pass'
$name = 'name'
$oLogn=_IEGetObjById($oIE, "login")
$oPass=_IEGetObjById($oIE, "pass_input")
_IEFormElementSetValue($oLogn, $name)
_IEFormElementSetValue($oPass, $pass)
$oForm = _IEGetObjById($oIE, 'login-form')
$oInputs = _IETagNameGetCollection($oForm, 'input')
For $oInput In $oInputs
	If $oInput.type = 'submit' And $oInput.value = 'Вход' Then
	ConsoleWrite("1")
	 _IEAction($oInput, 'click')
	 _IELoadWait($oInput)
	 ExitLoop
	 EndIf
Next

Я так понимаю не находит почему-то формы, а нажать сабмит другими способами тоже пока не получалось..

Обновление автоита помогло
 

joker2d

Новичок
Сообщения
182
Репутация
0
Подскажите на сайте есть форма со всплывающей авторизацией http://royalty-line.pw/test.php можно ее заполнить и засабмитить с помощью аутоит ? без использования просто функции Send ??
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
joker2d
Просто пример как сделать через "WinHttp"

Код:
$_sLogin = 'UserName'
$_sPassw = 'UserPass'
	$B64_1 = _Base64Encode($_sLogin &':'& $_sPassw)


$oRequest = ObjCreate('WinHttp.WinHttpRequest.5.1')
	$oErrorHandler = ObjEvent('AutoIt.Error', 'ErrorFunc')
	$oRequest.Option(6) = False ;WinHttpRequestOption_EnableRedirects

$oRequest.Open('GET', "http://royalty-line.pw/test.php", 0)
$oRequest.SetRequestHeader('User-Agent', 'Testing')
$oRequest.SetRequestHeader("Authorization", "Basic "&$B64_1)
$oRequest.Send()
$oRequest.WaitForResponse

$sData = $oRequest.ResponseText
	ConsoleWrite($sData&@CRLF)

; #FUNCTION# ;===============================================================================
;
; Name...........: _Base64Encode
; Description ...: Returns the given strinng encoded as a Base64 string.
; Syntax.........: _Base64Encode($sData)
; Parameters ....: $sData
; Return values .: Success - Base64 encoded string.
;                  Failure - Returns 0 and Sets @Error:
;                  |0 - No error.
;                  |1 - Could not create DOMDocument
;                  |2 - Could not create Element
;                  |3 - No string to return
; Author ........: turbov21
; Modified.......:
; Remarks .......:
; Related .......: _Base64Decode
; Link ..........;
; Example .......; Yes
;
; ;==========================================================================================
Func _Base64Encode($sData)
	Local $oXml = ObjCreate("Msxml2.DOMDocument")
	If Not IsObj($oXml) Then
		SetError(1, 1, 0)
	EndIf

	Local $oElement = $oXml.createElement("b64")
	If Not IsObj($oElement) Then
		SetError(2, 2, 0)
	EndIf

	$oElement.dataType = "bin.base64"
	$oElement.nodeTypedValue = Binary($sData)
	Local $sReturn = $oElement.Text

	If StringLen($sReturn) = 0 Then
		SetError(3, 3, 0)
	EndIf

	Return $sReturn
EndFunc   ;==>_Base64Encode
;~ ===============================================================================
Func ErrorFunc()
    MsgBox(16, 'Error', $oErrorHandler.description)
    Exit 2
EndFunc
;~ ===============================================================================


Итог:
Код:
<p>Hello UserName.</p><p>Au aaaee ia?ieu UserPass.</p>
 

uritalex

Новичок
Сообщения
197
Репутация
3
Доброй ночи знатоки! Подскажите как залогиниться на сайте с таким кодом:
Код:
  <div class="user-side">
 
                                            <div class="log_reg">
                            <a href="#" class="btn btn-green btn-login">
                                <span><i></i>Войти</span>
                            </a>
                            <a href="#" class="btn btn-blue btn-reg">
                                <span><i></i>Регистрация</span>
                            </a>
 
                            <div class="pp-window pp-login" id="signin" style="display: none;">
    <div class="pad">
 
    <form class="form-signin">
        <div id="login-part" style='display: block;'>
            <div class="inputs">
                <div class="row">
                    <label for="email">Email</label>
                    <div class="field">
                        <input type="text" name="email" id="email" class="required">
                        <span class="err_txt email-error"></span>
                    </div>
                </div>
                <div class="row">
                    <label for="password">Пароль</label>
                    <div class="field">
                        <input type="password" name="password" id="password" class="required">
                        <span class="err_txt email-error"></span>
                    </div>
                </div>
                <div class="row row-remember">
                    <span class="w_check remember"><i></i>Запомнить меня</span>
                </div>
            </div>
            <div class="row buts">
                <input type="hidden" value="504737261bea32b72e707e60b8f447197b2936c8" name="YII_CSRF_TOKEN">
                <button type="submit" class="btn btn-red button-signin">Войти</button>
                <a href="#" class="btn cancel login-cancel">Отмена</a>
            </div>
            <div class="row">
                <a href="#" class='forgot'>Забыли пароль?</a>
            </div>
        </div>
    </form>

Необходимые поля для ввода появляются после нажатия первого "Войти" с ним как то проблем нет работает это скрипт:
Код:
$oLinks1 = _IELinkGetCollection($oIE)
   For $oLink1 In $oLinks1
      If StringInStr(_IEPropertyGet($oLink1, "outerhtml"), "Войти") Then
         $oLink1.fireEvent("onmousedown")
         $oLink1.fireEvent("onmouseup")
         _IEAction($oLink1,'click')
         _IELoadWait($oIE)
         ExitLoop
      EndIf
   Next

Как только он отрабатывает всплывает окошечко с полями для ввода логина (он же мыло) и пароля. Вот тут то и проблема :( пробовал разные варианты последний был такой:
Код:
$oLogin = _IEGetObjById($oIE, "email")
$oPass = _IEGetObjByName($oIE, "password")
$oCheck = _IEGetObjById($oIE, "w_check remember")
$oButton = _IEGetObjById($oIE, "submit")

_IEFormElementSetValue($oLogin, $sLogin)
_IEFormElementSetValue($oPass, $sPass)
_IEAction($oCheck, 'click')
_IEAction($oButton, 'click')
_IELoadWait($oIE)

Но толку ни какого :( редактор скриптов выдает это:
Код:
--> IE.au3 T3.0-1 Warning from function _IEGetObjById, $_IESTATUS_NoMatch (w_check remember)
--> IE.au3 T3.0-1 Warning from function _IEGetObjById, $_IESTATUS_NoMatch (submit)
--> IE.au3 T3.0-1 Error from function _IEAction(click), $_IESTATUS_InvalidDataType
--> IE.au3 T3.0-1 Error from function _IEAction(click), $_IESTATUS_InvalidDataType
>Exit code: 0    Time: 28.29
Помогите пжалуйста :whistle:
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
$oIE.document.getElementsByClassName("btn-login").item(0).click()
Sleep(100)
$oLogin = _IEGetObjById($oIE, "email")
$oPass = _IEGetObjById($oIE, "password")
$oCheck = $oIE.document.getElementsByClassName("w_check remember").item(0)
$oButton = $oIE.document.getElementsByClassName("button-signin").item(0)

_IEFormElementSetValue($oLogin, $sLogin)
_IEFormElementSetValue($oPass, $sPass)
_IEAction($oCheck, 'click')
_IEAction($oButton, 'click')
_IELoadWait($oIE)
 

uritalex

Новичок
Сообщения
197
Репутация
3
К сожалению не помогло :( не вводит ни пароль ни логин скрипт выдает следующее:
Код:
--> IE.au3 T3.0-1 Error from function _IEAction(click), $_IESTATUS_InvalidDataType
--> IE.au3 T3.0-1 Error from function _IEAction(click), $_IESTATUS_InvalidDataType
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Попробуйте:
Код:
#include<IE.au3>

$sMail = '[email protected]'
$sPass = '111111111111'

$oIE = _IECreate('http://pumpyt.com/')
$oLink = _IELinkClickByText($oIE, 'Войти ')
$oForm = _IEFormGetCollection($oIE, 1)
$oMail = _IEFormElementGetObjByName($oForm, 'email')
$oPass = _IEFormElementGetObjByName($oForm, 'password')
_IEFormElementSetValue($oMail, $sMail)
_IEFormElementSetValue($oPass, $sPass)
_IEFormSubmit($oForm)
 

uritalex

Новичок
Сообщения
197
Репутация
3
Благодарю за ответ. Ваш вариант Кликает на первое"Войти" заносит логин и пароль но вот :
Код:
_IEFormSubmit($oForm)
не срабатывает :( Так же пробовал таким образом:
Код:
$oIE = _IECreate('http://pumpyt.com/')
$oLink = _IELinkClickByText($oIE, 'Войти ')
$oForm = _IEFormGetCollection($oIE, 1)
$oMail = _IEFormElementGetObjByName($oForm, 'email')
$oPass = _IEFormElementGetObjByName($oForm, 'password')
$oInn = _IEFormElementGetObjByName($oForm, 'YII_CSRF_TOKEN')
Sleep (500)
_IEFormElementSetValue($oMail, $sMail)
Sleep (500)
_IEFormElementSetValue($oPass, $sPass)
Sleep (500)
_IEAction ($oInn, 'click')
Так же нет желаемого результата :( Такое ощущение что клик либо взаимодействие отсылается не кнопке Войти, в всплывающем окне, а просто на страницу, что приводит к сворачиванию окошка с логином и паролем и все :(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
uritalex,
Ищите на форме
Код:
<button type="submit" class="btn btn-red button-signin">Войти</button>
по type и(или) class (примеров полно в этом разделе) и кликайте по ней.
 

uritalex

Новичок
Сообщения
197
Репутация
3
Ура!!!! :laugh: Получилось Но чуток как то загадочно, сам не понял что сделал :smile:Добавил это:
Код:
$aButtons = _IETagNameGetCollection($oIE, "button")
For $oButton In $aButtons
   If $oButton.type = "submit" And StringInStr($oButton.innerHTML, "Войти") Then
    _IEAction($oButton, "click")
     ExitLoop
   EndIf
Next

И оно залогинелось По другим параметрам не хотело логиниться :(
Конечно с методом подстановки далеко не уедешь может кто то сможет прокомментировать построчно что я сделал, или ткнет в тему где для самых чайников на пальцах это разжевано ?
 

mikzin

Новичок
Сообщения
80
Репутация
0
отменили на хостингер.ру доступ по FTP, теперь сижу, мучаюсь... :stars:
помогите плиз с авторизацией там,
http://cpanel.hostinger.ru/
а то я пробую по примеру из началы темы, не получается ((
Код:
#include <IE.au3>

$sLogin = '[email protected]'
$sPass = 'anwcub'
$sUrl = 'http://cpanel.hostinger.ru/'

$oIE = _IECreate($sUrl)
$oLogin = _IEGetObjById($oIE, 'username')
$oPass = _IEGetObjByName($oIE, 'password')
$oCheck = _IEGetObjById($oIE, 'Запомнить меня ')
$oButton = _IEGetObjById($oIE, 'loginButton')

_IEFormElementSetValue($oLogin, $sLogin)
_IEFormElementSetValue($oPass, $sPass)
_IEAction($oCheck, 'click')
_IEAction($oButton, 'click')
_IELoadWait($oIE)


данные для входа (специально созданный тестовый юзер)-
Login: [email protected]
Password: anwcub
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
<button class="btn purple pull-right" type="submit">

Ну откуда тут
Код:
$oButton = _IEGetObjById($oIE, 'loginButton')

??
 

mikzin

Новичок
Сообщения
80
Репутация
0
Код:
$oButton = _IEGetObjById($oIE, 'btn purple pull-right')

не работает все равно.. ((
может это из-за htpps протокола ?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
mikzin сказал(а):
Код:
$oButton = _IEGetObjById($oIE, 'btn purple pull-right')

не работает все равно.. ((
А с чего он должен работать? Вы ищите по ID, а ID там нет, там есть class.
Код:
$oButton = $oIE.document.getElementsByClassName('pull-right').item(0)
 

mikzin

Новичок
Сообщения
80
Репутация
0
и так не хочет :(
Код:
--> IE.au3 T3.0-1 Error from function _IECreate,  (Browser Object Creation Failed)
--> IE.au3 T3.0-1 Error from function _IEGetObjById, $_IESTATUS_InvalidDataType
--> IE.au3 T3.0-1 Error from function _IEGetObjByName, $_IESTATUS_InvalidDataType
"D:\AutoIt\Test2.au3" (10) : ==> Variable must be of type "Object".:
$oButton = $oIE.document.getElementsByClassName('pull-right').item(0)
$oButton = $oIE^ ERROR
->11:49:07 AutoIt3.exe ended.rc:1
 
Верх