如何判断元素是否可点击? - 硒

How to judge that the element is clickable or not? - Selenium

对于 URL 我正在尝试诱导点击下一页按钮。 为确保该按钮是否可点击,我尝试了以下操作:

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.fa.fa-angle-right')))

但这甚至适用于最后一页。 我的理解哪里出错了? 如何判断一个按钮是否可以点击呢? 在最后一页,下一页按钮是灰色的。

大家注意的话,当按钮是getting grayed out的时候,它有一个classattribute的属性值是getting changeddisabled.

您可以制作一个 function 并将下面的代码放入其中,可以 call 根据您的 requirement.

示例代码:

wait = WebDriverWait(driver, 20)
next_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//a[@aria-label='next page']")))
try:
    if next_button.get_attribute('class') == "disabled":
        print('Next button is not clickable anymore')
    else:
        print('Next button is available')
        next_button.click()
except:
    print('Something went wrong')
    pass

进口:

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

.element_to_be_clickable 甚至可以点击禁用的元素,因此寻找其他方法来实现您的目标。

在最后一页有独特的元素,这个选择器:

a.disabled .fa.fa-angle-right

您可以使用 .find_elements_by_* 方法检查元素的大小以确定是否存在,这将 return 列出。

看看这个简单的循环:

driver.get("https://esb.ie/tns/press-centre/2021")
 
try:
    # Here I face cookie setting, accept
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID, 'onetrust-accept-btn-handler'))).click()
except:
    print('no cookie setting appear')
 
while True:
    WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.fa.fa-angle-right'))).click()
    #check last page
    if(len(driver.find_elements_by_css_selector('a.disabled .fa.fa-angle-right')) > 0):
        break;

你也可以这样试试:

try:
    while True:
        if driver.find_element_by_xpath("//a[@aria-label='next page']").get_attribute("class")=='disabled':
            print("Disabled")
            break
        driver.find_element_by_xpath("//a[@aria-label='next page']").click()
        print("Clickable")
        time.sleep(5)
except Exception as e:
    print(e)
Clickable
Clickable
Clickable
Disabled