Исключение возникает из-за того, что селен ищет элемент до того, как элемент был загружен на страницу.
Более элегантный подход заключается в использовании selenium.webdriver.support.ui.WebDriverWait
, который позволяет удерживать поток выполнения до тех пор, пока не будет выполнено условие (например, наличие элемента в dom)
для дальнейшего чтения: Selenium ожидает документацию
Используя xpath, вы можете указать несколько элементов внутри условия, поэтому при наличии одного из них условие будет выполнено. Например, см. Этот ответ .
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
def match():
switcher = {
'hi': 'condition 1',
'hey': 'condition 2',
'hello': 'condition 3'
}
try:
# Wait for 10 seconds max until one of the elements is present or give up
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, "//div[@id = 'hi' or @id = 'hey' or @id = 'hello'"))
)
return switcher[element.get_attribute('id')]
except TimeoutException:
return None