Internet Explorer: запись URL-адресов на консоль с помощью AutoIt - PullRequest
2 голосов
/ 08 января 2012

Я использую autoit для запуска Internet Explorer.Я хочу, чтобы IE регистрировал все URL, которые он посещает, в окне консоли.Когда я компилирую этот скрипт, я компилирую его для запуска с окном консоли в фоновом режиме.

#include <IE.au3>

ShellExecute("iexplore.exe", "about:blank")
WinWait("Blank Page")
$oIE = _IEAttach("about:blank", "url")
_IELoadWait($oIE)
_IENavigate($oIE, "http://www.dell.com")
$oEvt = ObjEvent($oIE, "_IEEvent_")

While 1
    Sleep(5000)
WEnd

; BeforeNavigate2 method definition
Func _IEEvent_BeforeNavigate2($IEpDisp, $IEURL, $IEFlags, $IETargetFrameName, $IEPostData, $IEHeaders, $IECancel)
    ConsoleWrite("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!--BeforeNavigate2 fired--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " & @CRLF & _
            "$IEpDisp = " & $IEpDisp() & "  -  " & ObjName($IEpDisp) & @CRLF & _ ; e.g. default property and name for the object
            "$IEURL = " & $IEURL & @CRLF & _
            "$IEFlags = " & $IEFlags & @CRLF & _
            "$IETargetFrameName = " & $IETargetFrameName & @CRLF & _
            "$IEPostData = " & $IEPostData & @CRLF & _
            "$IEHeaders = " & $IEHeaders & @CRLF & _
            "$IECancel = " & $IECancel & @CRLF & _
            "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " & @CRLF & @CRLF)
EndFunc   ;==>_IEEvent_BeforeNavigate2

Моя проблема заключается в том, что при просмотре этого экземпляра IE в консоли ничего не отображается.Что я делаю не так?

ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ

Как и предложил Манадар, я перешел к следующему;этот код выдает ошибку на консоли: --> IE.au3 V2.4-0 Warning from function _IEAttach, $_IEStatus_NoMatch, но он чисто косметический.

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <IE.au3>

$oIE = _IECreate("about:blank", 1)
$oEvt = ObjEvent($oIE, "_IEEvent_", "DWebBrowserEvents2")
_IELoadWait($oIE)
_IENavigate($oIE, "http://www.cisco.com")

; Keep the console window open and poll with Sleep()
While 1
    Sleep(5)
WEnd

; BeforeNavigate2 method definition
Func _IEEvent_BeforeNavigate2($IEpDisp, $IEURL, $IEFlags, $IETargetFrameName, $IEPostData, $IEHeaders, $IECancel)
    $message = "!!!!!!!!!!!!!!!!!!!!!--BeforeNavigate2 fired--!!!!!!!!!!!!!!!!!!!!!!!! " & @CRLF & _
            "$IEpDisp = " & $IEpDisp() & "  -  " & ObjName($IEpDisp) & @CRLF & _
            "$IEURL = " & $IEURL & @CRLF & _
            "$IEFlags = " & $IEFlags & @CRLF & _
            "$IETargetFrameName = " & $IETargetFrameName & @CRLF & _
            "$IEPostData = " & $IEPostData & @CRLF & _
            "$IEHeaders = " & $IEHeaders & @CRLF & _
            "$IECancel = " & $IECancel & @CRLF & _
            "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" & @CRLF & @CRLF
    ConsoleWrite($message)
EndFunc   ;==>_IEEvent_BeforeNavigate2

1 Ответ

3 голосов
/ 09 января 2012

Неправильный порядок функций в вашем коде.ObjEvent должен быть вызван, прежде чем _IENavigate!В противном случае при навигации событие еще не прикреплено.Кроме того, для функции ObjEvent в качестве третьего параметра требуется «DWebBrowserEvents2».

Ваш код будет выглядеть следующим образом:

#include <IE.au3>

ShellExecute("iexplore.exe", "about:blank")
WinWait("Blank Page")
$oIE = _IEAttach("about:blank", "url")

$oEvt = ObjEvent($oIE, "_IEEvent_", "DWebBrowserEvents2")
_IELoadWait($oIE)
_IENavigate($oIE, "http://www.dell.com")

Не забудьте добавить while, sleep ивернитесь назад сами.

Вы должны также вместо:

ShellExecute("iexplore.exe", "about:blank")
WinWait("Blank Page")
$oIE = _IEAttach("about:blank", "url")

Сделать это:

$oIE = _IECreate("about:blank", 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...