Что нового

Автоматический логин (вход) на сайт

Статус
Закрыто для дальнейших ответов.

TicTac

Чайник
Сообщения
22
Репутация
0
как реализовать вход посредствам _IE..... функций
т.е. выбераем 5 сервер, вписываем лоигн login пароль parol снимаем галочку и тыкаем "Войти"
вот сайт http://www.server.com/
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
Лень читать хелп или написать 10 строк кода? :blink:
Кури все функции _IE, там все придельно просто и ясно!

Код:
#include <IE.au3>

$oIE     = _IECreate("http://www.server.com",0,1,1)
$oForm   = _IEFormGetObjByName($oIE,"form_login")
$oServer = _IEFormElementGetObjByName($oForm,"server")
$oLogin  = _IEFormElementGetObjByName($oForm,"USR")
$oPass   = _IEFormElementGetObjByName($oForm,"dummy")
_IEFormElementSetValue($oServer,"server2")
_IEFormElementSetValue($oLogin,"im_bot")
_IEFormElementSetValue($oPass,"password")
_IEFormSubmit($oForm,1)


Где
form_login - имя формы
server - инпут для выбора сервера
USR - инпут для ввода логина
dummy - инпут для ввода пароля
 
Автор
T

TicTac

Чайник
Сообщения
22
Репутация
0
El Panda сказал(а):
Лень читать хелп или написать 10 строк кода? :blink:
Кури все функции _IE, там все придельно просто и ясно!



Где
form_login - имя формы
server - инпут для выбора сервера
USR - инпут для ввода логина
dummy - инпут для ввода пароля
спасибо,просто в хелпе эти функции на англ, я англ не изучал
 

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
El Panda , спасибо за пример скрипта..
хотел попробовать , но так и не нашел в коде хтмл имя формы и инпуты для логина и пароля.
вот код страницы , где нужно вводить это все

Код:
<!-- login form -->
		<form action="login.php?do=login" method="post" onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0)">
		<script type="text/javascript" src="clientscript/vbulletin_md5.js?v=372"></script>
		<table cellpadding="0" cellspacing="3" border="0" style="margin-top:10px;">
		<tr>
			<td class="smallfont"><label for="navbar_username">Имя</label></td>
			<td><input type="text" class="bginput" style="font-size: 11px" name="vb_login_username" id="navbar_username" size="10" accesskey="u" tabindex="101" value="Имя" onfocus="if (this.value == 'Имя') this.value = '';" /></td>
			<td class="smallfont" colspan="2" nowrap="nowrap"><label for="cb_cookieuser_navbar"><input type="checkbox" name="cookieuser" value="1" tabindex="103" id="cb_cookieuser_navbar" accesskey="c" />Запомнить?</label></td>
		</tr>
		<tr>
			<td class="smallfont"><label for="navbar_password">Пароль</label></td>
			<td><input type="password" class="bginput" style="font-size: 11px" name="vb_login_password" id="navbar_password" size="10" tabindex="102" /></td>
			<td><input type="submit" class="button" value="Вход" tabindex="104" title="Введите ваше имя пользователя и пароль, чтобы войти, или нажмите кнопку 'Регистрация', чтобы зарегистрироваться." accesskey="s" /></td>
		</tr>
		</table>
		<input type="hidden" name="s" value="" />
	<input type="hidden" name="securitytoken" value="guest" />
		<input type="hidden" name="do" value="login" />		
		<input type="hidden" name="vb_login_md5password" />
		<input type="hidden" name="vb_login_md5password_utf" />
		</form>
		<!-- / login form -->
не могли бы вы подсказать?
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
El Panda , спасибо за пример скрипта..
хотел попробовать , но так и не нашел в коде хтмл имя формы и инпуты для логина и пароля.
вот код страницы , где нужно вводить это все
Твоя форма не имеет имени, её нужно вычислять по порядковому номеру или по экшену.
Смотри функцию _IEFormGetCollection()

vb_login_username - инпут логина
vb_login_password - инпут пароля
 

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
пробовал на сюда же войти. нашел инпут для пароля и логина: <input type="text" name="user" size="10" /> и <input type="password" name="passwrd" size="10" />. я надеюсь что не ошибся.
форму не нашел. использовал функцию _IEFormGetCollection(). находит 4 формы и их имена -0 . значит вход не через форму а через action?
может на этом примере подскажите?
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
значит вход не через форму а через action?
Вход в любом случае через форму, но по экшену можно определить нужную форму (как вариант).

находит 4 формы и их имена -0 .
Не нужно получать их имена, имен просто нет, поэтому возвращает -0.
При этом сами формы ты успешно получаешь, тебе нужно определить под каким номером твоя и вызывать _IEFormGetCollection() с этим номером. Чтобы определить, пробуй в цикле присваеивать известным нам импутам любое значение.
 

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
не понял о цикле. как можно присвоить значение если нет формы?
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
Александр сказал(а):
не понял о цикле. как можно присвоить значение если нет формы?
ну как это нет формы если их аж 4е!?

Код:
#include <IE.au3>
$oIE = _IECreate ("http://www.autoit-script.ru")
$oForms = _IEFormGetCollection ($oIE)
MsgBox(0, "Forms Info", "There are " & @extended & " forms on this page")
For $oForm In $oForms
    MsgBox(0, "Form Info", $oForm.name&@CRLF&$oForm.action)
Next


Пример между прочем из русского хелпа, в который стоит заглядывать прежде чем задавать вопросы ;)
 

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
точно четыре. только одно и то же по два раза:
http://autoit-script.ru/index.php?action=login2
и
http://autoit-script.ru/index.php?action=search2.
вот и все четыре формы..
я использовал
Код:
#include <IE.au3>

$oIE     = _IECreate("http://autoit-script.ru",0,1,1)
$oForm   = _IEFormGetObjByName($oIE,"http://autoit-script.ru/index.php?action=login2")
$oLogin  = _IEFormElementGetObjByName($oForm,"user")
$oPass   = _IEFormElementGetObjByName($oForm,"passwrd")
_IEFormElementSetValue($oLogin,"логин")
_IEFormElementSetValue($oPass,"пароль")
_IEFormSubmit($oForm)

показывает что скрипт отрабатывает до конца. но входа на сайт нет.
хелп у меня есть на русском. только раздел посвященный автоматизации интернета так и остался не переведен. справка у меня 3.2.4.6 версии.
извините если достал уже.
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
точно четыре. только одно и то же по два раза:
Если внимательно посмотреть то на странице действительно две формы логина и две формы поиска :smile: но они разные (в разных местах)

Ваш пример не работает потому что "http://autoit-script.ru/index.php?action=login2" это не имя формы, а ее action, соответственно нужную форму вы не получаете.

Попробую объяснить на примере.
Запускаем этот код и смотрим, что формы логина находится под номерами 0 и 2 (заголовок месаджа).
0 - верхняя форма 2 - форма в левом столбце.
Дальше мы заполняем обе формы. Остается только сабмит.

Код:
#include <IE.au3>
$oIE = _IECreate ("http://www.autoit-script.ru/")
$oForms = _IEFormGetCollection ($oIE)
$n=0
For $oForm In $oForms
    MsgBox(0, "Form "&$n&" Info", $oForm.name&@CRLF&$oForm.action)
	$n+=1
Next


$oForm   = _IEFormGetCollection($oIE,0)
$oLogin  = _IEFormElementGetObjByName($oForm,"user")
$oPass   = _IEFormElementGetObjByName($oForm,"passwrd")
_IEFormElementSetValue($oLogin,"форма0")
_IEFormElementSetValue($oPass,"пароль")

$oForm   = _IEFormGetCollection($oIE,2)
$oLogin  = _IEFormElementGetObjByName($oForm,"user")
$oPass   = _IEFormElementGetObjByName($oForm,"passwrd")
_IEFormElementSetValue($oLogin,"форма2")
_IEFormElementSetValue($oPass,"пароль")
 

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
я понял где была моя ошибка. почему то я решил что номер формы идет в кавычках...
Код:
$oForm   = _IEFormGetCollection($oIE,0)

вот именно в этой строчке и есть номер формы - 0 . можно так же записать цифру 2 и логин с паролем будут введены в нижнее поле .
как говорится, а слона то я и не заметил :smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
может быть не совсем по теме.

задумка такая : создать сообщение у себя на компе, а потом отправить его на сайт или форум и чтобы это было без загрузки страницы IE.
с автовходом понятно и с тем чтобы создать сообщение, но как обойти загрузку страницы?
 

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
я нашел как отправить сообщение не подгружая графику страницы сайта. можно конечно залогиниться и дать посеять куки у себя на компе. тогда не нужно делать вход каждый раз..но хотелось бы обойтись без куков. но когда срабатывает первая часть кода, то вторая работает в момент переадресации и происходит ошибка. как сделать прерывание до окончания переадресации, чтобы успешно сработала вторая часть кода?пробовал Sleep, но ничего не получилось..
Код:
#include <IE.au3>
$oIE = _IECreate ("http://",0,0)
$oForm   = _IEFormGetCollection($oIE,1)
$oLogin  = _IEFormElementGetObjByName($oForm,"login name")
$oPass   = _IEFormElementGetObjByName($oForm,"login password")
_IEFormElementSetValue($oLogin,"имя")
_IEFormElementSetValue($oPass,"пароль")
_IEFormSubmit($oForm)


$oForm1   = _IEFormGetCollection($oIE,3)
$otext  = _IEFormElementGetObjByName($oForm1,"message")
_IEFormElementSetValue($otext,"сообщение")
_IEFormSubmit ($oForm1)
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
но когда срабатывает первая часть кода, то вторая работает в момент переадресации и происходит ошибка.
_IEFormSubmit($oForm) замени на _IEFormSubmit($oForm,1) или добавь ниже строку _IELoadWait($oIE)

задумка такая : создать сообщение у себя на компе, а потом отправить его на сайт или форум и чтобы это было без загрузки страницы IE.
Если не хочешь работать с ИЕ то работай напрямую с http запросами. Кури WinHttp.WinHttpRequest
 

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
я пробовал _IELoadWait($oIE) и _IEFormSubmit($oForm,1) все равно идет ошибка. не происходит ожидания страницы.
всетаки Sleep сработал. надо только интервал подобрать.. это конечно не лучший вариант - инет бывает разный по скорости да и сайт может тормозить...ноо все же вариант
El Panda а вот это - WinHttp.WinHttpRequest я не нашел в справке..
 

joiner

Модератор
Локальный модератор
Сообщения
3 009
Репутация
502
вобщем опять нашел свою ошибку и все таки воспользовался функцией _IELoadWait
спасибо модеру темы за терпение. :smile:
но по WinHttp.WinHttpReques так и не нашел справку в автоите.. или это в функциях по API нужно искать . точнее в справке от майкрософта? надеюсь на подсказку..
вот сам код:
Код:
#include <IE.au3>
$oIE = _IECreate ("адрес вебстраницы")
$oForm   = _IEFormGetCollection($oIE, "номер формы")
$oLogin  = _IEFormElementGetObjByName($oForm,"input_name")
$oPass   = _IEFormElementGetObjByName($oForm,"input_password")
_IEFormElementSetValue($oLogin,"имя")
_IEFormElementSetValue($oPass,"пароль")
_IEFormSubmit($oForm,1)
_IELoadWait($oIE,10000)
$oMessage = _IEFormGetCollection($oIE,"номер формы")
$oText  = _IEFormElementGetObjByName($oMessage,"input_формы")
_IEFormElementSetValue($oText,"сообщение")
_IEFormSubmit($oMessage,1)
_IEQuit($oIE)
 

El Panda

Продвинутый
Сообщения
101
Репутация
59
WinHTTP это простой в использовнии HTTP клиент на основе стандартной библиотеки Windows, WinInet, позволяющий получать и отправлять данные серверным web-программам по HTTP протоколу. С помощью WinHTTP вы можете загружать web-страницы, загружать файлы и документы, получать результаты CGI-скриптов (напр. для получения результатов поисковиков или баз данных), отправлять (постить) данные в CGI (Perl/PHP/ASP и т.д.) скрипты, или даже "закачивать" файлы по HTTP(S)-протоколу.

При необходимости, компонент может работать также и в локальном интранете, для этого нужно лишь указать FILE:// префикс, вместо HTTP:// (или HTTPS://).

WinHTTP может получать данные и в бинарном и текстовом формате, поддерживет кэш Internet Explorer'а, может возобновлять прерванные даунлоады, читать данные из директорий защищённых паролем, автоматически поддерживает несколько схем прокси-аутентификаций (напр. Basic, Digest, NTLM и др.)
Код:
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Open("GET", "линк_гет_запроса")
$oHTTP.setTimeouts(5000, 5000, 15000, 15000)
$oHTTP.SetRequestHeader("Accept", "*/*")
$oHTTP.SetRequestHeader("Accept-Language", "ru")
$oHTTP.SetRequestHeader("Referer","линк_рефера")
$oHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded")
$oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
$oHTTP.SetRequestHeader("Host","хост")
$oHTTP.SetRequestHeader("Proxy-Connection", "Keep-alive")
$oHTTP.Send("")
$oHTTP.WaitForResponse
If @error Then
   Return 0
EndIf
$resp= $oHTTP.Responsetext
 

bulldog5293

Новичок
Сообщения
172
Репутация
9
А если имеется несколько сайтов но скрипт нужно использовать один, как прикрутить к нему другие параметры, к примеру сайт 1 плагин 1, сайт 2 плагин 2
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
963
Положите индексы всех ваши адресов и плагинов в массив, и потом, по вашему усмотрению, передавайте их в функцию обработчик. Функция, в свою очередь, получив данные из массива, обработает их согласно своему алгоритму, и выдаст вам результат.
Вкратце так. :smile:

А если вам пример нужен, то выложите более чёткие условия вашей задачи!

Ну, например:
Дано - "условие" (можно привести для наглядности кусок кода)
Нужно получить - "задача" (чётко описать поставленную задачу)

И я уверен, вам здесь помогут!
 
Статус
Закрыто для дальнейших ответов.
Верх