vba - 屏幕抓取 - 通过几个标签名称向下查找类名称

标签 vba excel web-scraping screen-scraping

很难找到蓝线来给它一个值(它是一个文本框):

img1

这是我当前尝试实现的目标 - 代码返回典型的运行时错误“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/

相关文章:

excel - 如何将动态更改的验证列表重置为第一项?

vba - 为什么删除工作表会导致我的代码停止

excel - 定义 X 和 Y 将发生变化的回归范围

python - 如何在抓取网页时单击下一步按钮

Python 和 BeautifulSoup 打开页面

excel - VBA Excel,循环变量

excel - 如何将所有这些代码放在一起以作为一个模块运行?

vba - 尝试将 Excel 图表复制到 Power Point 演示文稿时出现下标超出范围错误

python - 无法比较日期变量和 Pandas 数据框之间的日期

python - 使用 WebDriver 和 Selenium 在类中获取跨度