XPath, используемый в вашем примере, находит два поля - Email и Password. Это не будет работать для вашего кода, потому что вы просто пытаетесь найти электронную почту. Обозначение //
в вашем XPath означает, что путь находит любое поле - Электронная почта и пароль совпадают с элементами div
и input
с теми же именами class
, которые вы использовали. Нам нужно использовать уникальный атрибут, чтобы найти каждый элемент - в этом случае мы можем использовать атрибут data-fieldname
, чтобы получить правильное поле.
Также рекомендуется вызывать WebDriverWait
в поле Email, чтобы Дайте странице достаточно времени для загрузки, прежде чем пытаться найти и отправить ключи к элементу.
Следующий пример кода должен дать вам представление о том, как использовать эти атрибуты элемента. Это пример ввода адреса электронной почты, пароля и нажатия кнопки «Войти» на предоставленной вами странице - я успешно выполнил это локально:
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
driver.get("https://www.moz.com/login")
# wait for email field to exist
email_cell = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, "//input[@data-fieldname='email']")))
# send keys to email field
email_cell.send_keys("myemail")
# locate password and send keys
password_cell = driver.find_element_by_xpath("//input[@data-fieldname='password']").send_keys("mypassword")
# click log in
driver.find_element_by_xpath("//input[@value='Log in']").click()