如何避免IE.Navigate和GetElementById上的空值?

时间:2015-03-03 11:14:39

标签: excel vba getelementsbyclassname is-empty

我编写一些打开ie.navigate的vba scritp,并从网页获取一些值为excell值。

但有时该网址并未在网页上正确加载且未填充值。因此,当getelement尝试获取任何valume时,我的循环发生致命错误并停止。

另一点是,想象一下所有页面都是加载的..但是对于这个标准,一些geElementID是empyt ...我可以做些什么来避免它。

我的代码在这里:

Sub Extract_One_Airport()
Dim IE As New InternetExplorer
Dim dtStart As Date
Datec = 0
CountRange = 1
For lSCtr = 0 To 5

 		    Set P1 = Sheets("Inicio").Range("A9") 'Primeira p do link
                    Set P2 = Sheets("Inicio").Range("A10") 'Origem
              link = P1 & P2
                    
                    IE.navigate link
                    IE.Visible = True
                 
                    Application.Wait (Now() + TimeValue("00:00:45")) ' For internal page refresh or loading
                    Dim doc As HTMLDocument
                    Set doc = IE.document
                    Dim dd As Variant
                  
                    dd = doc.getElementsByClassName("valuefortoday")(0).innerText
                  
                    Sheets("Resul").Range("C" & CountRange).Value = dd
                    Count = Count + 1
                    CountRange = CountRange + 1
              
            Next
        
End Sub

正如我所说..有时 getElementsByClassName(“valuefortoday”)(0).innerText 空洞,导致网站当天没有任何信息...我怎样才能避免空值和跳过它第二天?

2 个答案:

答案 0 :(得分:0)

这将剪贴板写入StdOut。由于您只能在没有安全对话框的Intranet区域中使用IE的剪贴板,因此我导航到本地文件并等待它完成加载。

你也可以用事件来做。

Sub Clip
    Set ie = CreateObject("InternetExplorer.Application") 
    ie.Visible = 0
    ie.Navigate2 FilterPath & "Filter.html"
    Do 
        wscript.sleep 100
    Loop until ie.document.readystate = "complete"  
    txt=ie.document.parentwindow.clipboardData.GetData("TEXT")
    ie.quit
    If IsNull(txt) = true then 
        outp.writeline "No text on clipboard"
    else
        outp.writeline txt
    End If
End Sub

答案 1 :(得分:0)

您可以查看lenght的{​​{1}}属性。如果没有这样的元素,那么长度将等于零。

valueForToday