使用WBGet获取不到网页相关信息,MsgBox显示空白

遇到了问题?请先进行搜索(中文和英文),然后在此提问

Moderators: tmplinshi, arcticir

ziyuanjun
Posts: 3
Joined: 04 Dec 2021, 18:29

使用WBGet获取不到网页相关信息,MsgBox显示空白

Post by ziyuanjun » 04 Dec 2021, 18:48

大家好,我是Autohotkey新手,使用win10 64bit,Autohotkey 1.1.33.10

我写了一个程序,中间有一步是用鼠标拖动滑块自动划完(或者说自动浏览完)整个页面。目前设置的滑动时间是固定的,也就是不论网页有多长,滚动时间都一样。

我想问一下,是否能获取网页具体有多长,从而对于较短的网页,滑动(浏览)时间就可以缩短。

viewtopic.php?f=5&t=32027看到了一段代码,据说能获得网页的滚动滑块高度:

Code: Select all

^!p:: ;;Ctrl+Alt+P进行调用
WinGet, hWnd, ID, A
oWB := WBGet("ank_id " hWnd)
MsgBox, % oWB.document.title "`r`n" oWB.document.url
vScrollHeight1 := oWB.document.body.scrollHeight
vScrollHeight2 := oWB.document.documentElement.scrollHeight
;vScrollTop := oWB.document.documentElement.scrollTop
MsgBox, % vScrollHeight1 " " vScrollHeight2`
return
代码核心是 WBGet 函数,我在以下地方找到了这个函数的写法:viewtopic.php?f=76&t=91339&hilit=WBGetviewtopic.php?t=39869

但是经过测试,MsgBox输出是空白的,没有获得网页的相关信息。
Stack Overflow 上有个类似的问题,似乎并没有解决:https://stackoverflow.com/questions/28092189/get-the-value-of-an-input-field-in-ie-using-ahk

我想我的 WBGet 函数应该是没有正常运行,否则这个函数应该能帮助我获取网页具体有多长,甚至更多信息。
请问大家是否遇到同样的问题,有没有解决的办法或者思路,谢谢!

ziyuanjun
Posts: 3
Joined: 04 Dec 2021, 18:29

Re: 使用WBGet获取不到网页相关信息,MsgBox显示空白

Post by ziyuanjun » 04 Dec 2021, 20:29

补充:Edge、Firefox、Chome都试过了;管理员方式运行ahk脚本也试过了

完整代码如下:

Code: Select all

;WinActivate,ahk_exe msedge.exe ;;激活Edge窗口

^!p:: ;;Ctrl+Alt+P进行调用
WinGet, hWnd, ID, A
oWB := WBGet("ank_id " hWnd)
MsgBox, % oWB.document.title "`r`n" oWB.document.url
vScrollHeight1 := oWB.document.body.scrollHeight
vScrollHeight2 := oWB.document.documentElement.scrollHeight
;vScrollTop := oWB.document.documentElement.scrollTop
MsgBox, % vScrollHeight1 " " vScrollHeight2`
return


;[WBGet function for AHK v1.1]
;WBGet function - AutoHotkey Community
;https://autohotkey.com/boards/viewtopic.php?f=6&t=39869

WBGet(WinTitle="ahk_class IEFrame", Svr#=1) {               ;// based on ComObjQuery docs
   static msg := DllCall("RegisterWindowMessage", "str", "WM_HTML_GETOBJECT")
        , IID := "{0002DF05-0000-0000-C000-000000000046}"   ;// IID_IWebBrowserApp
;//     , IID := "{332C4427-26CB-11D0-B483-00C04FD90119}"   ;// IID_IHTMLWindow2
   SendMessage msg, 0, 0, Internet Explorer_Server%Svr#%, %WinTitle%
   if (ErrorLevel != "FAIL") {
      lResult:=ErrorLevel, VarSetCapacity(GUID,16,0)
      if DllCall("ole32\CLSIDFromString", "wstr","{332C4425-26CB-11D0-B483-00C04FD90119}", "ptr",&GUID) >= 0 {
         DllCall("oleacc\ObjectFromLresult", "ptr",lResult, "ptr",&GUID, "ptr",0, "ptr*",pdoc)
         return ComObj(9,ComObjQuery(pdoc,IID,IID),1), ObjRelease(pdoc)
      }
   }
}

ziyuanjun
Posts: 3
Joined: 04 Dec 2021, 18:29

Re: 使用WBGet获取不到网页相关信息,MsgBox显示空白

Post by ziyuanjun » 07 Dec 2021, 17:00

Bral wrote:
23 Jun 2018, 02:29
提供一条经验,在 Win 10 中用内嵌 IE 控件到 AHK GUI 中的方法来操作网页,结果发现遇到很多 DOM 操作函数不可用的情况,比如 Document.querySelector 这个命令,经多方查找原因,才发现是因为默认调用的是 IE的兼容模式,即模拟了 IE7,而导致一些命令不支持,解决办法是修改注册表,指定 AHK 中调用的 IE 版本:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"AutoHotkey.exe"=dword:00002710
上面提到了需要指定IE版本。我参照https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/ee330730(v=vs.85)?redirectedfrom=MSDN设置了我的IE11的dword。在win 10 IE中运行程序,MsgBox依然显示空白。

Post Reply

Return to “请求帮助”