如果我运行以下代码:
local $oBrowser = _IECreate("www.mywebsite.com")
local $oHTMLWindow = _IEAttach("Text In Title", "embedded")
我得到两种不同的行为(取决于Internet Explorer的保护模式配置)。
_IECreate()
(内部是_IENavigate()
)创建2个iexplore.exe进程(一个是容器,另一个是运行选项卡)。然后,我可以在$oHTMLWindow
变量上获取该句柄。 _IECreate()
(其后是_IENavigate()
)创建3个iexplore.exe进程。完整性低的原因之一(这是预期的保护模式部分)。问题是此过程随后失败。 完整性级别机制是否阻止了我进行处理?我该如何解决?
最佳答案
尝试获取Intranet站点时遇到了类似的问题,因为它们似乎要在不同的ie进程中打开,而原始过程的句柄似乎迷路了。我的解决方法是在网站网址的末尾附加一个随机字符串(并希望服务器对此不关心),然后尝试使用相同的随机网址附加到Internet Explorer窗口。这有点丑陋,但似乎可以为我持续工作。
#include <File.au3>
#include <IE.au3>
$url = 'https://www.mywebsite.com/'
; using a random string to ensure that we will attach to the IE instance that we created and not some other random one
$randomstring = StringTrimLeft(_TempFile('.','',''),2)
$randomurl = $url & '?' & $randomstring
_IECreate($randomurl)
$timer = TimerInit()
Do
if TimerDiff($timer)/1000 >= 10 then
ConsoleWrite('timeout' & @CRLF)
Exitloop
EndIf
sleep(10)
$oBrowser = _IEAttach($randomurl, 'URL')
Until @error<>7
$ie_hwnd=_IEPropertyGet($oBrowser, "hwnd")
ConsoleWrite($ie_hwnd & @CRLF)
另一个选择是,如果您可以使用,请以admin身份运行自动脚本,并在顶部使用#RequireAdmin。