Что нового

[Сеть, интернет] Как залогиниться на сайте и перейти по ссылке

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Как я понял залогиниться можно вот так, а как перейти по ссылке и получить содержимое страницы к которой залогинился?

r35p3ct сказал(а):
Код:
Func login()
$oIE     = _IECreate("http://xxx.ru/login.html", 0, 0)
$oForm   = _IEFormGetObjByName($oIE,"auth")
$ologin   = _IEFormElementGetObjByName($oForm,"login")
$opass   = _IEFormElementGetObjByName($oForm,"pass")

_IEFormElementSetValue($ologin,"Vasya")
_IEFormElementSetValue($opass,"12345")
_IEFormSubmit($oForm,1)
_IELoadWait ($oIE)
EndFunc
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Спасибо, а что могут означать следующие ошибки SciTE?

[box title=Ошибки]--> IE.au3 V2.4-0 Warning from function _IEFormGetObjByName, $_IEStatus_NoMatch
--> IE.au3 V2.4-0 Error from function _IEFormElementGetObjByName, $_IEStatus_InvalidDataType
--> IE.au3 V2.4-0 Error from function _IEFormElementSetValue, $_IEStatus_InvalidDataType
--> IE.au3 V2.4-0 Error from function _IEFormSubmit, $_IEStatus_InvalidDataType[/box]

В таком коде:
Код:
$oIE = _IECreate("http://vkontakte.ru/", 0, 0)
$oForm = _IEFormGetObjByName($oIE,"login")
$ologin = _IEFormElementGetObjByName($oForm,'email')
$opass = _IEFormElementGetObjByName($oForm,'pass')
_IEFormElementSetValue($ologin,$pLogin)
_IEFormElementSetValue($opass,$pPass)
_IEFormSubmit($oForm,1)
_IELoadWait($oIE)
$hTMPF = FileOpen($navView, 2)
FileWrite($hTMPF, _IEDocReadHTML($oIE))
FileClose($hTMPF)
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Mr. Anderson [?]
могут означать следующие ошибки
Для работы с сайтом необходима поддержка Javascript и Cookies.
Вас перенаправляют на адрес httр://vkontakte.ru/badbrowser.php, отсюда и ошибки.
Разрешите в настройках IE Javascript и Cookies.

P.S. Кстати при использование IE в скрытом режиме
Код:
$oIE = _IECreate("http:// ", 0, 0)

и возникновение ошибок подобного рода, следует позаботиться об удалении скрытых процессов iexplore.exe!
Код:
OnAutoItExitRegister( "_Exit" )

Func _Exit()
	Local $aIE = ProcessList("iexplore.exe")
	For $i = 1 to $aIE[0][0]
	ProcessClose($aIE[$i][1])
	Next
EndFunc

Иначе со временем, РС начнёт притормаживать ;)
Я рекомендую на момент теста скрипта не запускать IE в скрытом режиме!
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
А как увидеть содержимое фрейма вида:

Код:
<IFRAME id=app_container style="WIDTH: 800px; HEIGHT: 1203px" border=0 name="9609790f,http<#>//vkontakte.ru,default0,3,afef47f7c44468" src="http://vk-all.ordersgame.com/distributor.php?api_url=http://api.vk.............. frameBorder=0 width=800 scrolling=no height=730></IFRAME>
Это возможно командой:
Код:
_IEDocReadHTML()

Или надо что то еще???

И будут ли внутри этого фрейма работать:
Код:
_IELinkClickByIndex()
_IELinkClickByText()
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Mr. Anderson [?]
А как увидеть содержимое фрейма вида
Код:
_IEFrameGetCollection()
_IEFrameGetObjByName()


И будут ли внутри этого фрейма работать
Нет


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

Для обращения к iFrame, нужно сначала получить его src, потом загрузить его как отдельную страницу.
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Код:
$oFrame = _IEFrameGetObjByName ($oIE, $tttz) ;$tttz - имя фрейма
MsgBox(0,'',$oFrame)

$bb = _IEBodyReadHTML ($oFrame)
MsgBox(0,'',$bb)


Код:
C:\Program Files\AutoIt3\Include\ie.au3 (1940) : ==> The requested action with this object has failed.:
Return SetError($_IEStatus_Success, 0, $o_object.document.body.innerHTML)
Return SetError($_IEStatus_Success, 0, $o_object.document^ ERROR
Что бы это могло значить? :blink:
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Mr. Anderson [?]
Что бы это могло значить?
Это значить, что объект $oFrame сам по себе не содержит структуру документа, следовательно, функция _IEBodyReadHTML не может быть выполнена. Проще говоря, в iFrame документ (страница) загружается

Для применения функции _IEBodyReadHTML к документу, который загружен в iFrame:

Garrett [?]
нужно сначала получить его src, потом загрузить его как отдельную страницу.
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Хорошо, спасибо, только не разберусь как запускать, имя фрейма:

Код:
name="1e9a4734,http<#>//vkontakte.ru,default0,3,09c3f0de26513"
Если загружать именно 1e9a4734,http<#>//vkontakte.ru,default0,3,09c3f0de26513, то получается типа страница не найдена, и ссылка превращается в http://1e9a4734,http%3C/
:-X

---
а может не по name, а по src надо переходить) счас попробую
В итоге появляется окно IE с сообщением об ошибке "Выполнено, но с ошибками на странице" и пустой документ, просмотр HTML кода показывает:

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <script language="javascript" type="text/javascript">

            cfg_path_web = 'http://vk25.ordersgame.com';
            cfg_site_theme = 'default';
            cfg_ajax_get = '?api_url=http://api.vkontakte.ru/api.php';
            cfg_api_settings = 0;
            cfg_viewer_id = 0;
            cfg_is_app_user = 0;
            cfg_needed_settings = 7;

            resume_ajax = false;
        </script>
    </head>
<script src="http://vk-all.ordersgame.com/js/server.js?rnd=1290891202" type="text/javascript"></script>
<script src="http://vk-all.ordersgame.com/js/vk_api.js?rnd=1290891202" type="text/javascript"></script>
<script src="http://vkontakte.ru/js/api/xd_connection.js?rnd=1290891202" type="text/javascript"></script>

<script language="javascript" src="/js/jquery-1.4.2.min.js?rnd=1290891202" type="text/javascript"></script>


<body>

    
    <script type="text/javascript">
      VK.init(function() {
        checkProperInstall();
        addCallbacks();
      });
      if (checkProperInstall()){
          onRedirectMainPage(cfg_ajax_get, cfg_viewer_id);
      }
    </script>
    
<!--
    <img src="img/splash.jpg" alt="" onclick="checkProperInstall()" style="cursor: pointer;" /> -->
</body>
</html>

Наверное он не подгружает то что надо по ссылкам в ява скрипте? Это можно исправить?
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Mr. Anderson
Попробуйте так:
Код:
#include <IE.au3>
$sFrameName = "имя фрейма"
$oIE = _IECreate("http://vkontakte.ru")

ConsoleWrite(_IEFrameGetContent($oIE, $sFrameName) & @CRLF)

Func _IEFrameGetContent($o_Obj, $s_Name)
	$o_iFrame = _IEGetObjByName($o_Obj, $s_Name)
	If @error Then 
		ConsoleWrite("Error: _IEGetObjByName -> " & @error)
		Exit
	EndIf
	$s_Content = $o_iFrame.contentWindow.document.body.innerHTML
	Return $s_Content
EndFunc
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Из консоли:
Код:
--> IE.au3 V2.4-0 Warning from function _IEGetObjByName, $_IEStatus_NoMatch (Name: http://vk-all.ordersgame.com/distributor.php?api_url=http://api.vkontakte.ru/api.php&amp;api_id=1824042&amp;api_settings=7&amp;viewer_id=110884948&amp;viewer_type=2&amp;sid=1d29ff1075af2e4422075e36a678f9e6b804f705e89bb258b6b27bf724&amp;secret=8b0d82f372&amp;user_id=110884948&amp;group_id=0&amp;is_app_user=1&amp;auth_key=804283c6401df09d778fb78efeda8adb&amp;language=0&amp;parent_language=0&amp;api_result=%7B%22response%22%3A%5B%7B%22uid%22%3A110884948%2C%22first_name%22%3A%22%D0%92%D0%B0%D0%B4%D0%B8%D0%BC%22%2C%22last_name%22%3A%22%D0%92%D0%B5%D0%BB%D0%B8%D0%BA%D0%B8%D0%B9%22%2C%22photo_medium%22%3A%22http%3A%5C%2F%5C%2Fcs10359.vkontakte.ru%5C%2Fu110884948%5C%2Fb_5dae381b.jpg%22%2C%22sex%22%3A%222%22%7D%5D%7D&amp;lc_name=29fd055a&amp;hash=, Index: 0)
Error: _IEGetObjByName -> 7>Exit code: 0    Time: 10.172
Кажется я уже начинаю ничего не понимать :whistle:

Код:
7 ($_IEStatus_NoMatch) = No Match
-------------
А если передавать в переменной $sFrameName имя фрейма а не его src то получается вот это:

Код:
: ==> The requested action with this object has failed.:
$s_Content = $o_iFrame.contentWindow.document.body.innerHTML
$s_Content = $o_iFrame.contentWindow.document^ ERROR
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Так, как загрузить фрейм, и что бы без ошибок? В чем причина ошибки?
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Mr. Anderson
Дайте полную ссылку на страницу с нужным вам фреймом (свой данные в адресе смените, на что-то типа id00000000), я попробую посмотреть и помочь.
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
http://vkontakte.ru/app1824042 вот это приложение
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Mr. Anderson
Я так понимаю, вы хотите это приложение загрузить отдельно в GUI?
Если так, то вам понадобится использовать IE встроенный в GUI.
Для загрузки же самого приложения проще воспользоваться ссылкой:
httр://vk24.ordersgame.com/?api_id=1824042&viewer_id=Ваш ID&auth_key=Ваш ключ авторизации
Однако вы уже должны быть авторизированы.
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Отображать в GUI как таковой цели нет. Скорее автоматизировать некоторые действия в приложении, а уж об отображении я как то не забочусь, по крайней мере выполнял это следующей функцией (для отображения промежуточного этапа):
Код:
Func ViewResult($pfView)
	If $pfView = 1 Then
		$hTMPF = FileOpen($navView, 2)
		FileWrite($hTMPF, _IEDocReadHTML($oIE))
		FileClose($hTMPF)
		$Obj1.Navigate($navView)
	EndIf
EndFunc

$oIE - глобальная переменная

httр://vk24.ordersgame.com/?api_id=1824042&viewer_id=Ваш ID&auth_key=Ваш ключ авторизации

_IECreate для такой ссылки гугл открывает и пытается найти текст ссылки.

Код:
Func GameLoad($viewer_id, $auth_key)
	_IEQuit($oIE)
	$sLoadGameString = "httр://vk24.ordersgame.com/?api_id=1824042&viewer_id="&$viewer_id&"&auth_key="&$auth_key
	$oIE = _IECreate($sLoadGameString,0,1)
EndFunc


Не найдено ни одного документа, соответствующего запросу httр://vk25.ordersgame.com/?api_id=1824042&amp;viewer_id=11088494&amp;auth_key=804283c6401df09d778fb78efeda8adb.

Рекомендации:
Убедитесь, что все слова написаны без ошибок.
Попробуйте использовать другие ключевые слова.
Попробуйте использовать более популярные ключевые слова.
И кстати httр://vk24.ordersgame.com vk не всегда равно 24, исходя из текста страницы с фреймом и не узнать чему оно равно будет...
 
Автор
M

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
Большое спасибо, задача решена.

Код:
Func FrameName()
	$sLoadFrame = ''
	$sContentPage = _IEDocReadHTML($oIE)
	$sContentPage_Frame = StringRegExp($sContentPage, '(?s)<IFRAME\sid=app_container.+?</IFRAME>', 1)
	If @error = 0 Then
		$sURL_Game = 'http://vk24.ordersgame.com/?'
		
		$sApiID = StringRegExp($sContentPage_Frame[0], 'api_id=\d+?&', 1)
		$sApiSettings = StringRegExp($sContentPage_Frame[0], 'api_settings=\d+?&', 1)
		$sViewerID = StringRegExp($sContentPage_Frame[0], 'viewer_id=\d+?&', 1)
		$sViewerType = StringRegExp($sContentPage_Frame[0], 'viewer_type=\d+?&', 1)
		$sUserID = StringRegExp($sContentPage_Frame[0], 'user_id=\d+?&', 1)
		$sGroupID = StringRegExp($sContentPage_Frame[0], 'group_id=\d+?&', 1)
		$sIsAppUser = StringRegExp($sContentPage_Frame[0], 'is_app_user=.+?&', 1)
		$sAuthKey = StringRegExp($sContentPage_Frame[0], 'auth_key=.+?&', 1)
		$sLanguage = StringRegExp($sContentPage_Frame[0], 'language=.+?&', 1)
		$sApiURL = StringRegExp($sContentPage_Frame[0], 'api_url=.+?php', 1)
		
		$sLoadFrame = $sURL_Game&$sApiID[0]&$sApiSettings[0]&$sViewerID[0]&$sViewerType[0]&$sUserID[0]&$sGroupID[0]&$sIsAppUser[0]&$sAuthKey[0]&$sLanguage[0]&$sApiURL[0]
	Else
		MsgBox(0,"Ошибка", "Ошибка в определении имени фрейма")
	EndIf
	Return $sLoadFrame
EndFunc
 
Верх