#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() не работает. Я не могу этого понять, есть какие-нибудь идеи?