Python Selenium - скрытый фрейм, который иногда появляется с утверждением java-скрипта

У меня есть уведомление, которое появляется пару раз в неделю на этом веб-сайте, который я очищаю. И я не могу обойтись без этого.

Я могу запустить код.

el =  driver.find_element_by_xpath("//input[@id='btnRead']")
driver.execute_script("arguments[0].click();", el)

Это очищает его, но если я оставлю это в своем коде, это не даст мне исключения такого элемента. Событие, если я попытаюсь обернуть его в try/catch так.

from selenium.common.exceptions import NoSuchElementException

try:
    el = driver.find_element_by_xpath("//input[@id='btnRead']")
    driver.execute_script("arguments[0].click();", el)
except NoSuchElementException:
    print(nonefound)
sleep(5)
driver.quit()

Это также очищает его, если он существует, но если нет, ошибка. Я предполагаю, что делаю что-то не так, но я пробовал несколько разных версий этого, и я всегда получаю сообщение об ошибке, из-за которой окна зависают и останавливается выполнение остальной части скрипта.

Любые идеи были бы отличными.

2 ответа

Решение

Вы можете проверить длину элемента, если хотите продолжить свои скрипты.

Если длина элементов больше 0, произойдет щелчок.

if len(driver.find_elements_by_xpath("//input[@id='btnRead']"))>0 :
    el = driver.find_element_by_xpath("//input[@id='btnRead']")
    driver.execute_script("arguments[0].click();", el)
else:
    print("nonefound")

Или побудить WebDriverWait() а также visibility_of_element_located()

try:
    el = WebDriverWait(driver,5).until(EC.visibility_of_element_located(("//input[@id='btnRead']")))
    driver.execute_script("arguments[0].click();", el)
except NoSuchElementException:
    print("nonefound")

Вам необходимо импортировать следующие библиотеки.

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

Возможно ли другое исключение, кроме NoSuchElementException. "Повешение" могло быть отTimeoutException. Попробуйте напечатать исключение следующим образом:

from selenium.common.exceptions import NoSuchElementException

try:
    el = driver.find_element_by_xpath("//input[@id='btnRead']")
    driver.execute_script("arguments[0].click();", el)
except Exception as e:
    print(e)
sleep(5)
driver.quit()
Другие вопросы по тегам