我正在使用VBA来自动从结构化网页中提取报告。
我有以下代码块,该代码块可更改数组中每个元素的下拉元素“
With IE
For Each itemName In itemNames()
i = i + 1
Module2.check_and_wait_for_item ("cboDistrict")
Set Dropdown = .document.getElementsByName("cboDistrict")(0)
Dropdown.Value = itemValues(i)
Dropdown.FireEvent ("onchange")
check_and_wait_for_item ("cmdRptPreview")
Set btnPreview = .document.getElementsByName("cmdRptPreview")(0)
btnPreview.Click
check_and_wait_for_item ("BtnExport")
Set HTMLDoc = .document
write_file_to_dir HTMLDoc, "C:\Users\user\Documents\____thing\", itemName & ".html"
.GoBack
Next itemName
End With
问题出在IE.GoBack上。我有一个函数,当页面上没有特定元素时,通过循环检查JavaScript是否完成执行。即使JavaScript事件尚未完成运行,“返回”也会将该元素放回到页面上。
这就是为什么要在我的函数检查JavaScript事件是否已完成运行之前删除旧的“ cmdRptPreview”元素的原因。
有办法吗?感谢帮助。
解决方案是删除包含JavaScript服务员功能正在检查的元素的Node。在.GoBack之后:
check_and_wait_for_item ("cmdRptPreview")
.document.getElementsByName("cmdRptPreview")(0).ParentNode.RemoveChild .document.getElementsByName("cmdRptPreview")(0)