Элемент находится только «иногда», потому что он, вероятно, не полностью загружен на страницу перед вашей попыткой найти его.
Я бы изменил эти три строки:
email = emailgen()
time.sleep(0.1)
mail = driver.find_element_by_name('email').send_keys(email)
Для этого:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# add the above imports
email = emailgen()
mail = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.NAME, 'email')))
mail.send_keys(email)
Мы заменяем time.sleep()
на WebDriverWait
в поле электронной почты, чтобы убедиться, что оно полностью загружено перед его обнаружением. time.sleep()
будет каждый раз ждать одинаковое количество времени, что не всегда достаточно для загрузки страницы. WebDriverWait
выполняет точное время ожидания, необходимое для загрузки элемента, до 15 секунд. Надеюсь, это исправит ваши периодически возникающие ошибки.