很难找到蓝线来给它一个值(它是一个文本框):
这是我当前尝试实现的目标 - 代码返回典型的运行时错误“91”:对象变量或 With block 变量未设置
IE.Document.GetElementById("main"). _
GetElementsByTagName("div")(0). _
GetElementsByTagName("div")(0). _
GetElementsByTagName("div")(0). _
GetElementsByTagName("table")(0). _
GetElementsByTagName("tbody")(0). _
GetElementsByTagName("tr")(0). _
GetElementsByTagName("td")(0). _
GetElementsByClassName("textbox125 PatientID")(0).Value = patientid
自从我完成屏幕抓取以来已经有一段时间了,我猜我那里有一个额外的标签名称,或者我的其中一个标签的项目编号错误......在有人问之前,我我不太喜欢查询选择器,我更喜欢用这种方式写出我的抓取内容:)。
最佳答案
您应该能够使用:
ie.document.querySelector("#main .textbox125.PatientID")
它的目标是 main
的父 ID 和目标元素类 .textbox125 PatientID
。由于不允许使用复合类名,因此需要额外的 .
来删除空格。
如果您不想使用 querySelector,只使用可见的内容,猜测会使用标签名称并执行:
ie.document.getElementsByTagName("input")(1)
记住:
您始终可以右键单击以获取元素上的基本选择器/xpath
而且,您使用的路径越长,您的方法就越脆弱。
<小时/>更长的路径:
据我所知,您需要 第二个 td
标记,即索引 1,然后使用子 input
标记重复该标记。这是基于可见的!确实需要实际的 HTML 来测试,因为我对此的可行性没有信心。
IE.Document.GetElementById("main"). _
GetElementsByTagName("div")(0). _
GetElementsByTagName("div")(0). _
GetElementsByTagName("div")(0). _
GetElementsByTagName("table")(0). _
GetElementsByTagName("tbody")(0). _
GetElementsByTagName("tr")(0). _
GetElementsByTagName("td")(1). _
GetElementsByTagName("input")(1).Value = patientid
关于vba - 屏幕抓取 - 通过几个标签名称向下查找类名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52507010/