如何使用 Selenium 检查 HTML 中是否存在元素

How to check if an element exists in the HTML using Selenium

我有一个问题。我在页面上用class找了一个元素,从那里显示文字,然后split()就反汇编了,但是没有元素就报错,不解析。

代码:

spans =  driver.find_elements(By.XPATH, "//span[@class='ipsContained ipsType_break']")

for span in spans:
    atag = span.find_element(By.XPATH, ".//a")
    print(atag.get_attribute('href'))
    urlik = atag.get_attribute('href')
    driver.get(url=urlik)
    time.sleep(2)
    urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump").text
    for page_number in range(int(urla.split()[3])):
        page_number = page_number + 1
        driver.get(url=urlik + f"page/{page_number}")
        time.sleep(2)
        imgs = driver.find_elements(By.CLASS_NAME, "cGalleryPatchwork_image")
        for i in imgs:
            driver.execute_script("arguments[0].scrollIntoView(true);", i)
            time.sleep(0.2)
            print(i.get_attribute("src"))

我需要检查这个:

urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump").text

而不是

urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump")

使用

urla = driver.find_elements(By.CLASS_NAME, "ipsPagination_pageJump")
if urla:
    urla[0].text

find_elements 方法 returns 一个 list 与传递的定位器匹配的网络元素。
因此,如果这样的元素存在 urla 将是一个 non-empty 列表,而 non-empty 列表在 Python 中被解释为布尔值 True.
如果没有找到匹配的元素 urla 将是一个空列表,而空列表在 Python 中被解释为布尔值 False.

要尝试使用 class 在页面上查找元素并从那里显示文本,而不管该元素是否存在,您可以将代码包装在 block handling the 中,如下所示:

driver.get(url=urlik)
time.sleep(2)
try:
    urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump").text
    for page_number in range(int(urla.split()[3])):
        page_number = page_number + 1
        driver.get(url=urlik + f"page/{page_number}")
        time.sleep(2)
        imgs = driver.find_elements(By.CLASS_NAME, "cGalleryPatchwork_image")
        for i in imgs:
            driver.execute_script("arguments[0].scrollIntoView(true);", i)
            time.sleep(0.2)
            print(i.get_attribute("src"))
except NoSuchElementException:
    print("Element is not present")