使用 Python 和 Selenium 在 XPath 中跟随兄弟

Following-sibling in XPath using Python and Selenium

我不知道如何使用 following-sibling 为图片中标记为绿色的那些找到 xpath。基本上我想点击名为“打开”的按钮,它与文本“前面”位于同一行。

试试这个 XPath:

//td[strong="front"]/following-sibling::td//a[.="Open"]

P.S。因为你没有提供 HTML sample as text (不要提供它作为图片!!!) 我看不到 <i>...</i> node

中是否有文本

所以你也可以试试

//td[strong="front"]/following-sibling::td//a[contains(., "Open")]

您可以使用这个 XPath:

//td[strong="front"]/following-sibling::td//a[contains(text(), "Open")]

试试这个

//strong/parent::td/following- sibling::td/descendant::i/following-sibling::text() [contains(.,'Open')]

上面的xpath是假设Open text的级别和i是同一级别

根据 HTML,您已将元素与文本共享,因为 front 没有任何兄弟姐妹。所以你可能无法使用 following-sibling.


解决方案

要单击文本为 Open 的按钮,该按钮与文本为 front 的元素位于同一行,您需要诱导 for the element_to_be_clickable() and you can use the following based :

  • 使用 XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//strong[text()='front']//following::td[1]//a[@class='btn default ']"))).click()
    
  • 使用 XPATH 以及文本:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//strong[text()='front']//following::td[1]//a[contains(., 'Open')]"))).click()
    
  • 注意:您必须添加以下导入:

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