【问题标题】:Find Elements with dynamic id's and Xpaths's查找具有动态 id 和 Xpath 的元素
【发布时间】:2017-08-11 14:44:32
【问题描述】:

如果这是一个问题的重复,我深表歉意,但我读过的任何东西似乎都没有解决问题。

我正在尝试自动化增加我的工作时间的过程。这需要使用 selenium 来模拟我为我输入时间所做的过程。

问题是,当我浏览该过程时,我遇到了一个实例,其中一个元素具有动态 id 和 xpath(可能还有其他东西。我对 HTML 不是很精通)。

我需要选择“查看”下拉菜单中的“日期”按钮。突出显示的 HTML 对应于该按钮。我已经检查过,每次创建新会话时 ID 和 Xpath 都会发生变化。我通常会执行以下操作来查找我的元素:

elem = driver.find_element_by_xpath('xpath')

下面是我目前看到的xpath:

//*[@id="ab5378a9418345a2a57ad12f066127a6"]

更复杂的是,“周”选择的 xpath 如下:

//*[@id="741015164c5547fbb5403c03c46636d3"]

我试图弄清楚如何在 xpath 中使用“contains”,但即便如此,两者的差异也不足以通过使用“@id”来区分。我每次看到的唯一不变的事情和不同是

 data-automation-label="Day"

出现在 day 元素上并且

data-automation-label="Week"

出现在周元素上。

出现此类问题时,有没有人有寻找元素的经验?我在 Windows 7 计算机上使用 Python3.6 工作。

再次,如果这是重复的,我深表歉意,但在来这里寻求帮助之前,我非常努力地寻找答案。

提前致谢!

【问题讨论】:

  • 为什么你不能使用那个 div 容器中专门的类?

标签: python-3.x selenium selenium-chromedriver


【解决方案1】:

您可以使用以下两种可能的选择器

XPATH

//div[@data-automation-label="Day"]

CSS

div[data-automation-label="Day"]

当您使用标识符时,您的主要关注点应该是如何找到该对象独有的东西。它是 name 或 id 还是什么都没有关系。使用您认为最有效的方法。而这里data-automation-label 暗示了它自己

【讨论】:

  • 是的,只是等到它允许我这样做:)
  • 我现在遇到了一个非常相似的问题,我很犹豫要不要创建一个新线程,因为它与这个对应。我需要找到另一个元素,这里的一致性是“aria-labelledby”包含“56$187009”。我尝试了以下但找不到xpath。 "driver.find_element_by_xpath("//div[contains(@aria-labelledby, '56$187009')]")" 我是否正确使用了这个命令?我打算给你发私信,但不知道该怎么做,所以我为塞满/凌乱的文字道歉
  • "//div[contains(@aria-labbeledby, "56$187009")]"
  • 这就是我之前尝试过的,我得到了以下错误:“raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: { "method":"xpath","selector":"//div[contains(@aria-labbeledby, "56$187009")]"}"
  • 试试 [aria-labelledby*="uid19-formLabel"]。如果这不起作用,请发布一个新问题
猜你喜欢
  • 2012-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多