我正在使用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 实例冲浪时,控制台中没有显示任何内容。我做错了什么?
最终解决方案
按照 Manadar 的建议,我更改为以下内容;此代码在控制台上引发错误:--> IE.au3 V2.4-0 来自函数 _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
最佳答案
您的代码中的函数顺序错误。应在 _IENavigate 之前调用 ObjEvent!否则,当您导航时,事件尚未附加。最重要的是,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 和 function。
您还应该代替:
ShellExecute("iexplore.exe", "about:blank")
WinWait("Blank Page")
$oIE = _IEAttach("about:blank", "url")
这样做:
$oIE = _IECreate("about:blank", 1)
关于internet-explorer - 互联网浏览器 : Logging URLs to the Console with AutoIt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8778972/