vbs - 是否可以将IE Object会话移交给MSXML2.XMLHTTP对象?

时间:2013-12-09 00:08:36

标签: vbscript

我有一个MS SQL框,其中包含一系列ETL例程,可通过Web界面和Oracle CRM On Demand从Oracle OBIEE中提取数据。

OBIEE提取使用MSXML2.XMLHTTP对象,并且运行完美 - 用户凭据在URL中发送(全部在防火墙后面)。

目前我唯一成功的CRM On Demand方法是使用IE对象并模仿登录操作,导航到报告页面(xml url),并将生成的呈现页面保存到文件系统以供SQL使用。我面临的挑战是,对于较大的报告,IE的xml渲染会出现问题,并且要么超时要么出错。此外,IE对象看起来很好看,并且经常会报告ObjBusy = false和readystate = 4,当它仍在处理时 - 因此需要一些丑陋的黑客来检查循环中生成的渲染页面的大小。

理想的偏好是使用MSXML2.XMLHTTP对象,但我不能让该对象进行身份验证。我需要登录的页面是https://sso.crmondemand.com/router/logon.jsp

如果有人知道如何通过身份验证页面,我可以简单地使用现有方法 - 否则有一个选项以某种方式将我的经过身份验证的会话从IE对象传递给MSXML2.XMLHTTP对象,这将允许XML大小限制被否定。

相关的MSXML2.XMLHTTP代码

Dim xmlHTTP : Set xmlHTTP = CreateObject("MSXML2.XMLHTTP.6.0") 'Microsoft.XMLHTTP
Const adTypeBinary = 1 ' ado typelib constants
Const SourceURL = "https:// URL HERE"
xmlHTTP.Open "GET", SourceURL, bGetAsAsync, "userid", "pass"
xmlHTTP.Send
'further code to save file not relevant

相关的IE对象代码

Set objIE = CreateObject("InternetExplorer.Application")
set WshShell = CreateObject("WScript.Shell")

objIE.Navigate "https://sso.crmondemand.com/router/logon.jsp"
objIE.visible = true

    Do While objIE.Busy
        wscript.sleep 200
    Loop
    Do Until objIE.ReadyState = 4 'READYSTATE_COMPLETE
        wscript.sleep 200
    Loop

objIE.Document.getElementById("IPT_SC_SignIn").innerText = myUserName
objIE.Document.getElementById("IPT_SC_Password").innerText = myPassword
objIE.Document.Forms(0).Submit()

    Do While objIE.Busy
        wscript.sleep 200
    Loop
    Do Until objIE.ReadyState = 4 'READYSTATE_COMPLETE
        wscript.sleep 200
    Loop

objIE.Navigate "https:// Path to report... &Action=Download&Format=xml"

    Do While objIE.Busy
        wscript.sleep 200
    Loop
    Do Until objIE.ReadyState = 4 'READYSTATE_COMPLETE
        wscript.sleep 200
    Loop

myVar2 = len(objIE.document.documentElement.innertext)
wscript.sleep 1000

Do While len(objIE.document.documentElement.innertext)<>myVar2
    myVar2 = len(objIE.document.documentElement.innertext)
    wscript.sleep 1000
Loop
'further code to save file not relevant

0 个答案:

没有答案