internet-explorer - 互联网浏览器 : Logging URLs to the Console with AutoIt

标签 internet-explorer com autoit

我正在使用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/

相关文章:

.net - iexplore.exe.config 被忽略

php - 在怪异模式下访问 ie 时禁用站点

html - 溢出-y :scroll won't Display scrollbar in Internet Explorer

数据库、关系查询

html - 在 Internet Explorer 5 上将 DIV 彼此对齐

.net - 如何检测dll是否是COM dll

c# - 如何跨进程边界编码进程外 COM 引用?

java - 如何在多个 Java 线程中使用 COM 服务器

windows - 检测系统关闭或注销

image - AutoIt - 按内容查找重复图像?