查找元素并单击。如果没有找到转到下一页

FInd Element and Click. If Not Found goto next page

您好,我有以下第 1 页元素的代码。

<span _ngcontent-iyc=""class="ng-star-inserted">ELEMENT 1</span>
<span _ngcontent-iyc=""class="ng-star-inserted">ELEMENT 2</span>
<span _ngcontent-iyc=""class="ng-star-inserted">ELEMENT 3</span>
<span _ngcontent-iyc=""class="ng-star-inserted">ELEMENT 4</span>

同样,我还有 4 个包含不同元素的页面。

我需要的是使用 selenium python 找到一个元素,如果该元素存在于该页面中,则单击它。否则点击下一页,在那里搜索元素,直到找到元素。

我试过的代码是:

elxpath = "//span[contains(text(),'Element 20')]"
while True:
    time.sleep(5)

        if (driver.find_element_by_xpath(elxpath)):
            driver.find_element_by_xpath(elxpath).click()
            break
        else:
            driver.find_element_by_xpath("xpath to goto next page").click()
            break

但此代码适用于第一页中的元素。如果条件为假,则不会点击下一页。

我得到的错误: 消息:没有这样的 element:Unable 来定位元素:{"method":"xpath","selector":"//span[contains(text(),'Element 20')]" }

还有其他方法吗? 谢谢

find_element_by_ 将 return 元素或将抛出 NoSuchElementException 如果找不到元素,if 将在这里不起作用。

使用find_elements_by_获取元素列表并检查它是否不为空

elements = driver.find_elements_by_xpath(elxpath)
if elements:
    elements[0].click()

最好使用 tryexcept

from selenium.common.exceptions import NoSuchElementException

elxpath = "//span[contains(text(),'Element 20')]"
while True:
    time.sleep(5)

        try:
            driver.find_element_by_xpath(elxpath).click()
            break
        except NoSuchElementException:
            driver.find_element_by_xpath("xpath to goto next page").click()
            break
       

你可以这样做


elxpath = "//span[contains(text(),'Element 20')]"
while True:
    time.sleep(5)
    try:
        driver.find_element_by_xpath(elxpath).click()
        break
    except Exception:
        driver.find_element_by_xpath("xpath to goto next page").click()