用Excel中的vba获取网页内容填写网页表单

有些网页写得很复杂,iframe内又套iframe,直接从IE对象获取内层iframe中的元素是获取不到的。需要逐层进去,一层也不可跳过。对于每个iframe,用 f.contentWindow.Document.getElementByid 获取iframe内的子元素。而不是直接从ie.Document去getElementByid。

整个连接起来看是很长的:ie.Document.getElementByid("第一层iframe").contentWindow.Document.getElementByid("第二层ifrem") ......

            Set ie = objShell.Windows(x)
            Set a = ie.Document.getElementByid("frmDesk")
            MsgBox "Frame1" & IsObject(a)
            Set b = a.contentWindow.Document.getElementByid("frame1641431282801")
            MsgBox "Frame2" & IsObject(b)
            Set c = b.contentWindow.Document.getElementByid("frmReportA")
            MsgBox "Frame3" & IsObject(c)
            Set d = c.contentWindow.Document.getElementByid("tr0_xm")
            MsgBox d.innerHTML
            Set e = c.contentWindow.Document.getElementByid("tr0_pscj")
            MsgBox IsObject(e)
            e.FirstChild.Value = 90

通配符

属性选择器

其中一个iframe的名字是随机生成的,后面的整数每次都不同。可以改成用querySelector函数,用通配符匹配。

  • [id^='someId'] will match all ids starting with someId.

  • [id$='someId'] will match all ids ending with someId.

  • [id*='someId'] will match all ids containing someId.

Set b = a.contentWindow.document.querySelector("[id^='frame1641']")

结束程序

End语句。Visual Basic遇到End语句就结束运行。

杂项函数

Trim去除前后空格。Str整数转字符串。Round小数取整。InStr搜索匹配子字符串。
循环语句while wend、while do loop……两种?

你可能感兴趣的:(用Excel中的vba获取网页内容填写网页表单)