VBA:使用objElement和objCollection从网站提取数据

时间:2013-08-29 01:27:51

标签: excel vba

我试图使用objElement和objCollection从网站提取数据。相关和工作代码如下:

    Sub Step6()
Dim LoanNumX As Long
Dim LastX As String
Dim Phone1X As String
Dim Phone2X As String
Dim PiX As String
Dim TiX As String
Dim myText2 As String

    ActiveWorkbook.Save


    Range("M2").Select


Do While ActiveCell.Value <> ""
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
LastX = ActiveCell.Value
ActiveCell.Offset(, -12).Select
BigX = ActiveCell.Value
Phone1X = "N/A"
Phone2X = "N/A"
PiX = "N/A"
TiX = "N/A"

Set IE = CreateObject("InternetExplorer.Application")

IE.Navigate "https://website.com"

Application.StatusBar = "https://website.com is loading. Please wait..."

Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

Set objCollection = IE.Document.getElementsbyTagName("input")

             A1 = 0
While A1 < objCollection.Length
            If objCollection(A1).Name = "networkId" Then
                    objCollection(A1).Value = "ID"

            Else
            If objCollection(A1).Name = "password" Then
                    objCollection(A1).Value = "PW"

            Else
            If objCollection(A1).Name = "btnLogin" Then
                    Set objElement = objCollection(A1)
                    objElement.Click
            End If
            End If
            End If
            A1 = A1 + 1
Wend

    Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

以上代码功能齐全。下面的代码直接在上面的代码之后,出现问题:

Application.StatusBar = "Search form submission. Please wait..."


Set objCollection = IE.Document.getElementsbyTagName("input")

    L = 0
While L < objCollection.Length
            If objCollection(L).Name = "account" Then
                    objCollection(L).Value = BigX
          Else
           If objCollection(L).Name = "lastName" Then
                   objCollection(L).Value = LastX

           Else
            If objCollection(L).Type = "image" Then
                   Set objElement = objCollection(L)
                    objElement.Click
            End If
            End If
            End If
            L = L + 1
    Wend

出于某种原因,跳过上面的代码。我没有说明原因,但宏从未经历过while语句 - 就好像L&gt; objCollection.Length从一开始。如果我进入脚本,它会跳过:

        While L < objCollection.Length

到以下代码段:

Wend

结果是打开IE浏览器,访问初始页面,输入和提交登录数据,显示结果页面,然后打开另一个IE实例并重复循环。 IE,初始页面,登录数据,结果页面,IE,初始页面,登录数据,结果页面,IE ...所以当我强制宏退出时,我最终将一些实例全部卡在同一页面上。< / p>

我尝试过几种不同的方法,但到目前为止还无法解决问题。

以下是我在HTML中的数据:

    <td><input type="text" name="account" maxlength="9" size="25" value="" onkeypress="accountSelected()" class="inputbox"></td>
    <td><input type="text" name="lastName" size="25" value="" onkeypress="lastNameSelected()" class="inputbox"></td>
    <input type="image" src="images/search.gif" alt="Search">

非常感谢任何帮助!此外,我正在使用MS Excel 2007和IE 7.我知道IE 7不支持IE.Document.getElementsbyClassName,因此规则作为潜在的解决方案。我知道Excel 2007和IE 7都已过时,但我无法更新它们。

1 个答案:

答案 0 :(得分:0)

我已经离开了这个问题,因为我现在已经确定了真正的问题。

这是我更新的问题: VBA: Enter data into a form within one of many frames on a website