访问 vba IE getElementById "object required"错误 424



这与这个问题有关

从网站上的表中抓取数据,而无需搜索标签

这段代码一直工作到几天前,从那时起唯一的变化是更改为 Windows 10,但这应该不会影响它,不是吗?

此外,它似乎会抓取第一条记录,然后给出错误。 但是,如果我单击"调试",然后单击"跳出",它将起作用并转到下一条记录,我必须再次单击"调试"、"跳出"等。 81次。

从中调用了其他函数,它们只是抓取更多内容并将其放在表中,我认为它们不是问题所在,但如果需要,我可以添加它们。

给出错误 424 的行是

If .Document.getElementById("middleContent_lbType").outerHTML Like "*General Acute Care Hospital*" Then

这是代码

Public Sub VisitPages()
DoCmd.RunSQL "DELETE FROM ScrapedFacs"
AutoID = 1
Dim ie As New InternetExplorer
'Set ie = New InternetExplorerMedium
With ie
.Visible = False
.navigate "http://healthapps.state.nj.us/facilities/acSetSearch.aspx?by=county"
While .Busy Or .ReadyState < 4: DoEvents: Wend
With .Document
.querySelector("#middleContent_cbType_1").Click
.querySelector("#middleContent_cbType_4").Click
.querySelector("#middleContent_btnGetList").Click
End With
While .Busy Or .ReadyState < 4: DoEvents: Wend
Dim list As Object, i  As Long
Set list = .Document.querySelectorAll("#main_table [href*=doPostBack]")
For i = 0 To list.Length - 1
list.Item(i).Click
While .Busy Or .ReadyState < 4: DoEvents: Wend
If .Document.getElementById("middleContent_lbType").outerHTML Like "*General Acute Care Hospital*" Then
FacType = "General Acute Care Hospital"
ElseIf .Document.getElementById("middleContent_lbType").outerHTML Like "*Psychiatric Hospital*" Then
FacType = "Psychiatric Hospital"
End If

Address = Replace(Replace(Replace(.Document.getElementById("middleContent_lbAddress").outerHTML, "<span id=" & Chr(34) & "middleContent_lbAddress" & Chr(34) & ">", ""), "<br>", ", "), "</span>", "")
WriteTable .Document.getElementsByTagName("table")(3), .Document.getElementById("middleContent_lbName_county").innerText

'do stuff with new page
.Navigate2 .Document.URL             '<== back to homepage
While .Busy Or .ReadyState < 4: DoEvents: Wend
Set list = .Document.querySelectorAll("#main_table [href*=doPostBack]") 'reset list (often required in these scenarios)
Next
' Stop                                     '<== Delete me later
.Quit '<== Remember to quit application
End With
End Sub

问题是因为运行代码太快

所以要么在行之前添加一个睡眠

Sleep 1
...Document.getElementById("middleContent_lbType")..

或者开始检查是否有返回值

Set obj = .Document.getElementById("middleContent_lbType")
If obj is Nothing:
Sleep 1
Set obj = .Document.getElementById("middleContent_lbType")
End If
If obj.outerHTML Like "*General Acute Care Hospital*" Then
...

最新更新