Selenium (PYTHON) проверяет, существует ли элемент

Итак, я пытаюсь выяснить, как правильно запустить этот цикл, моя проблема в том, что в зависимости от загружаемой ссылки загружаемая страница будет иметь ошибку отказа в доступе, это не так для всех ссылок, моя проблема в том, что я хотел бы определить, распознает ли программа, когда конкретный элемент загружается на мой экран, и прерывает цикл, и запускает следующую итерацию в цикле for, поэтому я пытаюсь определить, присутствует ли элемент «отказано в доступе», и если да, то прервите, иначе продолжите цикл for

idList = ["8573", "85678", "2378", "2579"]


for ID in idList:


    print(ID)
    driver.get(f"https://www.someWebsite/username/{ID}")

    element = driver.find_element_by_class_name("Access-Denied")
   
    print("error loading website")
    break
if not element:

    print("you may continue the for loop")

Имейте в виду, что если элемент, показывающий страницу с отказом в доступе, отсутствует, я получаю сообщение об ошибке, что элемент «Отказано в доступе» не существует, как я могу это исправить?


person ExoticLegend714    schedule 14.02.2021    source источник


Ответы (2)


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

from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait

...
try:
    _ = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "Access-Denied"))
        )
    print("error loading website")
    break
except TimeoutException:
    print("you may continue the for loop")
...

person VirtualScooter    schedule 14.02.2021

Итак, вы хотите выполнить цикл, если доступ запрещен, а затем сломаться.

wait = WebDriverWait(driver, 10)
idList = ["8573", "85678", "2378", "2579"]

for ID in idList:
    print(ID)
    driver.get(f"https://www.someWebsite/username/{ID}")
    try:
        element=wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'Access-Denied')))
        break
    except:
        continue

импорт

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC
person Arundeep Chohan    schedule 14.02.2021