为什么我不能从网站上在此表上使用 FindElementByXPath?



我目前正在使用selenium和chromedriver在vba上进行网页抓取。

我登录一个网站(该网站是,不幸的是,无法到达由于登录的必要性,但它是https://monitoring.csisolar.com/login),并在主页,有一个通用表与一堆信息。

我使用"inspect element"并将表对象识别为图像:

打印找到的元素,表被高亮显示

当我选择"copy xpath",我得到这个:"//*[@id="mCSB_67_container"]/table">

当然,我是这样设置命令的:
Set tabela = driver.FindElementByXPath("//*[@id="mCSB_67_container"]/table") 'Seleciona a tabela pelo java
If tabela Is Nothing Then
MsgBox "Não encontrado"
Else
tabela.AsTable().ToExcel (ActiveSheet.Cells(1, 1)) 'Cola a tabela na planilha (aba) onde está o botão
End If

但是excel上什么都不打印

我在其他类似的网站(solarweb.com)做了同样的事情,它运行得很好,但是表对象定义了id和类,而上面的表对象没有命名属性(如打印中所示)

我知道这个问题不是很清楚,但如果有什么可以帮助你理解,请在下面评论,我很乐意编辑我的问题

下面的东西正在创建动态id。你的目标是找到不会改变的选择器。然后使用它们在DOM中导航,直到找到您的表。在你的小摘录中,我没有看到任何永远不会改变的独特id。如果你只有一个表可见,你可以像这样找到它:

driver.findElement(By.cssSelector("table"));

mCSB_67_container似乎是动态创建的id值,即这不是固定的id值。
我不确定(需要使用开发工具查看实际页面),但是您可以尝试使用这个XPath:

Set tabela = driver.FindElementByXPath("//div[contains(@class,'mCustomScrollBox']//table")

有时候,元素很难定位,如果是静态表和动态更新值页。更好的右键点击和复制xpath给chrome。这很有效。而不是写循环逻辑。

输入图片描述

正在尝试的问题不工作,因为该表元素是一个动态对象,所以它是"one_answers";class"属性不是常量,不能被引用。因此,感谢@Prophet和@David M,我发现我应该寻找一个静态引用,而不是网站界面的一部分,不是动态的,然后使用它来引用所述表。

我使用的元素是包含该元素的划分,该元素的ID为"plantlist"。下面是我找到这个元素的截图:

红色箭头指向table元素,绿色箭头指向用于引用

的静态元素从这一点开始,我只是通过每一个其他元素,直到我到达表。最后一行是这样的:

Set canadian = driver.FindElementByXPath("//*[@id=""plantList""]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/table") 'Seleciona a tabela pelo java
If canadian Is Nothing Then
MsgBox "Não Encontrado"
Else
canadian.AsTable().ToExcel (ActiveSheet.Cells(1, 1)) 'Cola a tabela na planilha (aba) onde está o botão
End If

相关内容

  • 没有找到相关文章

最新更新