【问题标题】:selenium how to locate this type of element?selenium 如何定位这种类型的元素?
【发布时间】:2022-01-15 08:09:07
【问题描述】:

此元素是一个箭头按钮,用于扩展块。 该元素是消息框链接网站的箭头按钮。 链接网站页面的右下角有一个消息框。 所以我想点击那个箭头。我尝试了很多路径,但它没有给我这样的元素例外。 最主要的是 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>

我也试过这条路,但它没有给出任何异常

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.")]')

那么,如何定位该元素?

【问题讨论】:

    标签: python selenium selenium-webdriver xpath linkedin


    【解决方案1】:

    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 中,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]
    

    【讨论】:

    • 通过这个你的解决方案它点击第二个按钮(新消息按钮),但我想点击第三个按钮(最小化按钮)
    • 感谢我得到了解决方案,您只需将 XPath 的最后一部分中的 1 更改为 2 即可。请将您的解决方案更新为此 minimize = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH,"//div[contains(@class, 'msg-overlay-bubble-header__controls')]//button")))[2]
    • 1) 我的第一个问题是如何知道该类名在整个 HTML 中是唯一的?也许其他元素可以有相同的类名,对吧?
    • 2) 我的第二个问题是 XPath 最后部分的 [1] 是什么?我从未见过 [1] 写在 () 这个括号之外的 XPath。这是 xpath 对吗? //div[contains(@class, 'msg-overlay-bubble-header__controls')]//button 还是这个? //div[contains(@class, 'msg-overlay-bubble-header__controls')]//button[2]哪一个是正确的?你能帮帮我吗?
    • 对于我的 2) 问题是正确的,无论我们通过 //div[contains(@class, 'msg-overlay-bubble-header__controls')]//button 定位的任何元素,我们都会在该 div 中获得一个元素列表(数组),这就是我们选择第二个元素(索引1) 这就是为什么我们在结尾写 [1] 的原因?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2018-04-16
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多