Я только что проверил страницу регистрации ProtonMail, чтобы найти сообщение об ошибке, о котором вы говорите. Исходя из описания вашей проблемы, кажется, что вы хотите действовать по-другому в вашем коде в зависимости от наличия этого сообщения об ошибке. Ваш пример кода немного сложен для прочтения, потому что все ваши клики по абсолютным координатам, а не по фактическим WebElements, поэтому я не совсем уверен, что нажимается в вашем примере. Это может быть хорошей отправной точкой для вас:
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Fill in all details on form
# Click Create Account - I assume you have already done these two steps
# Check for error message -- this is in an iframe
# switch to first iframe on the page which will contain the error message
iframe = driver.find_elements_by_xpath("//iframe[@title='Registration form']")[0]
# attempt to find the error message, catch the exception if it does not exist
try:
# Handle scenario where error message exists -- username is taken
error_message = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//p[text()='Username already used']")))
# better to write a handler method, instead of stuffing code into the try block
call_some_handler_method_here()
except TimeoutException:
# Handle scenario where error message does NOT exist -- meaning, username is not taken
call_some_other_handler_method_here()
Этот код переключится на iframe
, который содержит сообщение об ошибке для уже принятого имени пользователя - это необходимо для драйвера, чтобы найти элемент. После этого введите WebDriverWait
в блоке try
/ except
, чтобы проверить, существует сообщение об ошибке или нет.
Если сообщение об ошибке присутствует, вы окажетесь внутри блока try
, где вы можете вызвать метод, чтобы продолжить соответственно.
Если сообщение об ошибке НЕ присутствует, то есть имя пользователя не занято, вы окажетесь в блоке except
, где вы можете вызвать другой методдействовать соответственно (например, сохранить имя пользователя в файл).