Подтвердите, отключена ли ссылка selenium/Python

#python #selenium

Вопрос:

Приведенный ниже код находит правильную ссылку из неупорядоченного списка в браузере, однако EC.element_to_be_clickable функция не работает, потому что, если ссылка не была доступна для клика, потребуется обновить браузер (чтобы проверить еще раз).

Вместо этого, есть ли какой-либо способ проверить ссылку, отключена ли она (и нажмите (), если это не так? Ссылка будет предоставлена в одном из приведенных ниже форматов

 <a class="Button disabled">Purchase</a>
<a class="Button">Purchase</a>
 

Код ниже

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

try:
    if len(driver.find_elements(By.XPATH, "//span[text()='$30.00']/../following-sibling::div/a[text()='Purchase']")) > 0:
        print("Found, now attempting to click link")
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='$30.00']/../following-sibling::div/a[text()='Purchase']"))).click()
 

Ответ №1:

Чтобы проверить, отключена ли ссылка, т. е. если его класс содержит «отключено», просто найдите его в своем классе:

 try:
    if len(driver.find_elements(By.XPATH, "//span[text()='$30.00']/../following-sibling::div/a[text()='Purchase']")) > 0:
    elem = driver.find_element(By.XPATH, "//span[text()='$30.00']/../following-sibling::div/a[text()='Purchase']")
        print("Found, now attempting to click link")
        if "disabled" in elem.get_attribute("class"):
            print("Link disabled! Refreshing page.")
            driver.refresh()
        else:
            elem.click()
 

Комментарии:

1. Отлично, спасибо! Есть ли также способ узнать, не содержит ли он «отключено»?

2. Да — если «отключено» не в элементе.get_attribute(«класс»)

3. Спасибо Тебе! Все работает идеально, за исключением того, что элемент не щелкается, когда ему приказывают это сделать. Я попробовал оба метода, elem.click() и попытался, перейдя к исходному элементу find_element(By. XPATH..) Есть идеи? Мне нужно было сделать отступ в строке elem = в вашем предложении, чтобы запустить код, это как-то связано с этим?

4. Ах да, возможно, извините — нужно сделать отступ.

5. Да — сделал это, но по какой-то причине элемент.click() не работает. Я не могу этого понять, есть какие-нибудь идеи?