VBA - getElementById适用于简单网站但不适用于其他网站吗?

时间:2016-06-03 23:00:13

标签: html excel vba parsing

所以我目前停留在获取VBA脚本以从this Sudoku website检索输入框的值。但是,我能够使用相同的代码从我自己的简单网站获取id为“contact”的段落元素的值(当然,在切换url和id名称之后)。

任何进一步研究的尝试都会引发文章/博客,讨论到目前为止我所做的事情,所以我怀疑我没有正确研究它。

这是我的代码:

Sub GetTable()

Dim ieApp As InternetExplorer
Dim ieDoc As Object
Dim sudokuCell As Object
Dim url, id, content As String
Dim i As Integer

Set ieApp = New InternetExplorer

ieApp.Visible = True

url = "http://www.websudoku.com/"
ieApp.navigate url

Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.READYSTATE = READYSTATE_COMPLETE: DoEvents: Loop

Set ieDoc = ieApp.document

If ieDoc Is Nothing Then
    MsgBox ("Nothing")
'Else
'    MsgBox ("Something")
End If

For i = 0 To 8
    Set sudokuCell = ieDoc.getElementById("f00")
    content = sudokuCell.innerText
    MsgBox (content)
Next i

ieApp.Quit
Set ieApp = Nothing

End Sub

以下是一个空白的单元格的HTML示例:

<td class="g0" id="c00"><input class="d0" size="2" autocomplete="off"
name="8iz6n11" maxlength="1" onblur="j8(this)" id="f00"></td>

这是一个预先填充数字的单元格:

 <td class="f0" id="c10"><input class="s0" size="2" autocomplete="off"
 name="s8iz6n21" readonly="" value="7" id="f10"></td>

我尝试了“c00”和“f00”都没有成功。另外,虽然我认为手头的问题是我没有检索元素,但我担心.innerText属性不会检索值。

1 个答案:

答案 0 :(得分:0)

首先:网站正在使用FRAME,因此您实际上并未访问VBA代码中的框架文档。您需要导航到下面给出的实际URL - 将您的url变量更改为以下(这是框架的src属性):

url = "http://view.websudoku.com/?"

第二:那些是你试图获取值的INPUT元素,你应该更好地使用Value属性而不是innerText

content = sudokuCell.Value

第三个也是最后一个:我不知道你的代码在循环中应该做什么,因为它将继续按原样读取f00元素值。但是我相信你会遍历输入元素,只是在这里找到我上面解释过的FRAME问题,所以我认为循环是你的一部分而且没有任何麻烦。