selenium如何定位这类元素?

selenium how to locate this type of element?

此元素是一个箭头按钮,用于展开块。 该元素是消息框链接网站的箭头按钮。 在链接的网站页面的右下角有一个消息框。 所以我想点击 arrow.I 尝试了很多路径,但它给了我 nosuchelement 异常。 最主要的是 id="ember84" 这个 id 总是在我们刷新页面时改变那个元素 所以下面这条路径不起作用

xpath("//button[@id='ember84']")

这是那个完整元素的HTML

<button id="ember84" class="msg-overlay-bubble-header__control msg-overlay-bubble-header__control--new-convo-btn artdeco-button artdeco-button--circle artdeco-button--muted artdeco-button--1 artdeco-button--tertiary ember-view" xpath="1">  <li-icon aria-hidden="true" type="chevron-down-icon" class="artdeco-button__icon" size="small"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" data-supported-dps="16x16" fill="currentColor" class="mercado-match" width="16" height="16" focusable="false">
  <path d="M1 5l7 4.61L15 5v2.39L8 12 1 7.39z"></path>
</svg></li-icon>

<span class="artdeco-button__text">
    You are on the messaging overlay. Press enter to minimize it.
</span></button>

我也试过这个路径,但它给出了 nosuchelement 异常

msg = driver.find_element_by_xpath('//button[1]//li-icon[1]//span[constains(text(), "You are on the messaging overlay. Press enter to minimize it.")]')

那么,如何定位该元素?

Fist 让我们使用这些导入来查找元素

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

接下来,如果您查看按钮周围的 html,它位于 div 中,在 class、msg-overlay-bubble-header__controls 中具有独特的文本。在 div 里面有两个按钮,从截图上看你想要第二个。所以你可以通过以下方式获得最小化按钮:

minimize_button = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH,"//div[contains(@class, 'msg-overlay-bubble-header__controls')]//button")))[1]