网页上有一个登陆页面(index.jsp)。我现在能通过代码进行登陆,登陆后会转到main页面,我想获取main页面的窗口句柄。并想获取main页面form中某个text的值,
我用document.getElementById("tid").value 无法获取。(我怀疑objIE 现在还是指向最开始那个登陆页面的句柄,并没有指向http://www.xxx.com/main/xxx.do),我现在想获取http://www.xxx.com/main/xxx.do句柄,应如何实现?代码:
//设定用户名
UserVar NameVal=xxxxxxxx
//设定密码
UserVar PwdVal=xxxxxxxxxVBS Dim objIE
VBS Set objIE = CreateObject("InternetExplorer.Application")
VBS objIE.Visible=true// 打开预定网页
VBS objIE.Navigate "http://www.xxx.com"
// 判断网页是否读取完毕
While objIE.Busy Or  objIE.ReadyState <> 4
    Delay 3000
EndWhile // ==============登陆=================
// 用户名
VBS objIE.Document.All("name").Value = NameVal
//密码
VBS objIE.Document.All("password").Value = PwdVal
// 提交
VBS objIE.Document.All("submit").Click()//登陆后转向其他页面
VBS objIE.Navigate "http://www.xxx.com/main/xxx.do"//下面2步就无法实现了。提示缺少document.getElementById的对象
//设置http://www.xxx.com/main/xxx.do页面form中name为keyword的值
objIE.Document.All("keyword").Value = 新闻 
//提交
VBS objIE.Document.All("submit").Click()顺便问下 如何散分~!

解决方案 »

  1.   

    你直接用WebBrower控件来做这个事情好了,每次地址改变和新窗口打开都有相应的事件(DocumentComplete事件和NewWindow2事件)
      

  2.   

    获得IE窗口句柄并不难,如果是独立IE窗口,查找类名为“IEFrame”的窗口就行了(如果是多个IE窗口,还需要进行枚举并判断),如果是使用WebBrowser控件,则查找类名为“Shell Embedding”就行。
    难的是通过窗口句柄获得IWebBrowser接口,楼上超级绿豆在博客里写过这个代码,可以去看一下。
    建议楼主不要使用VBS,而是使用VB来获得IE事件。
    如:
    Dim WithEvents IE As InternetExplorer
    Sub Form_Load()
        Set IE = New InternetExplorer
    End Sub
    并且建议不要使用浏览器状态来判断页面是否完成,因为现在AJAX太流行了,有以元素以动态增加的,你那样判断会出现失误,正错的判断是:
    Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant)
        If pidp Is IE.Object Then
        End If
    End Sub