我有一个脚本,我把它放在一起,a)创建一个InternetExplorer对象,b)导航到我们内部调度系统的基于Web的界面,c)输入密码并选择适当的视图选项。脚本的基础知识如下:
Const READYSTATE_COMPLETE = 4
Dim objExplorer
Set objExplorer = Wscript.CreateObject("InternetExplorer.Application", "objExplorer_")
objExplorer.navigate "http://url.to.scheduling.page"
While objExplorer.busy Or objExplorer.ReadyState <> READYSTATE_COMPLETE
Wscript.Sleep 50
Wend
Dim objElem
Set objElem = objExplorer.document.getElementById("password")
objElem.value = "password"
Set objElem = Nothing
objExplorer.document.getElementById("commit").Click()
While objExplorer.busy Or objExplorer.ReadyState <> READYSTATE_COMPLETE
Wscript.Sleep 50
Wend
我一直在用IE8和IE9做一些测试,并且发现当我编写IE对象的脚本时,页面HTML被错误地呈现(特别是一些文本用粗体/斜体表示)。但是,如果我手动启动IE8或IE9(而不是通过脚本),则页面呈现正确。请参阅下面的截图:
IE RENDERING - MANUAL LAUNCH
SCRIPTED IE RENDERING(文本粗体和斜体)
我最初怀疑这与IE文档/浏览器模式在脚本化IE对象中获取不同的默认值有关,但是呈现的HTML具有<!-- DOCTYPE html -->
声明和(至少根据IE)开发工具),两个版本都以标准模式显示。
有没有人对脚本化的后IE7 IE对象呈现页面的经验与手动启动的对象有什么不同?脚本和手动启动的对象是否会以任何不同的方式报告自己(可能是浏览器嗅探并动态生成CSS的js函数?)
任何想法都赞赏。
答案 0 :(得分:0)
IE9包含32位和64位版本(请参阅http://support.microsoft.com/kb/896457)。使用Wscript.CreateObject的方法(“InternetExplorer.Application”将打开IE9的64位版本,该版本存在Flash Player,.Net Security等问题。
要查看32位版本是否提供相同的渲染差异,请比较直接从以下位置使用iexplore.exe时网址的显示方式:
C:\ Program Files \ Internet Explorer(64位)
C:\ Program Files(x86)\ Internet Explorer(32位)
如果IE9 32位模式正确显示,请在脚本中包含以下子例程,并将其作为脚本的第一行调用。
Sub Force32bit()
If InStr(UCase(WScript.FullName), "SYSTEM32") > 0 and CreateObject("Scripting.FileSystemObject").FolderExists("C:\Windows\SysWOW64") Then
Dim objShell : Set objShell = CreateObject("WScript.Shell")
objShell.CurrentDirectory = "C:\Windows\SysWOW64"
objShell.Run "wscript.exe " & WScript.ScriptFullName,1,False
WScript.Quit
End If
End Sub
这确定脚本是否默认使用IE9 64位,如果是,则退出并重新启动脚本以使用IE9 32位。这应该允许在以前版本的IE上使用相同的脚本。 (有关详细信息,请参阅http://www.visualbasicscript.com/Launching-IE-in-32-bit-mode-from-VBS-script-m80179-p2.aspx。