我正在使用 Selenium 查找 Chrome 浏览器中显示的 HTML 文档中的元素。 HTML 不是我制作的,似乎有很多问题。我没有能力改变它的世代,我只能用我所拥有的去努力。
这是我试图从其文本“>一般租赁法律信息”中查找的元素的 HTML 片段
<div class="TableTitlebar HeaderedTableTitlebar">
<div class="FastTitlebar">
<div class="FastTitlebarCaptionWrapper">
<h3 id="caption2_Dd-53" class=" FastTitlebarCaption">General Lease Legal Information</h3>
</div>
这是一个非常混乱的结构中的许多层次。我尝试了 FindElement 搜索条件的不同组合。我总是收到找不到元素的错误。
最大的问题是,当页面重新呈现时,生成此 HTML 的网站会经常重新生成元素的 ID。所以使用 ID 搜索最终会失败。此外,像类名这样的属性只是 ID 的重复,并不能稳定地呈现元素的内容。
以下是如何访问该网页。 打开浏览器并转到: https://oktap.tax.ok.gov/OkTAP/web?link=PUBLICPUNLKP
选择“按 PUN 搜索:”单选按钮 输入值“029-123551-0-0000” 滚动到页面底部并选择“搜索”按钮。 “搜索”按钮上方将有一行文本,最左侧突出显示“029-123551-0-0000”。选择此链接。 在新页面上,选择菜单栏右侧的“可打印”选项卡。 在新页面上,向下滚动以找到“一般租赁法律信息”表格。
由于 HTML 中的注释非常糟糕,因此找到包含我要查找的数据的以下表格元素的唯一方法,无需硬编码 ID 来搜索我发布的 HTML 片段中的标题文本,然后搜索第一个此后的表格元素。
这确实是一团糟。由于 HTML 的结构很差,我不确定该网站是否可以废弃。我使用 C#,因为这是我自己和公司其他程序员的熟练程度。我愿意接受有关如何找到所需元素以及重新设计整个应用程序的建议。
你可以做类似的事情
<h3 id="caption2_Dd-53" class=" FastTitlebarCaption" data-automated-testing="your-test-automation-id">General Lease Legal Information</h3>
document.querySelector("div[data-automated-testing]")
您可以将自定义属性称为任何您想要的名称,只需在它们前面加上“data-”即可