Как очистить конкретное поле, как показано в приведенном ниже коде HTML с Python? - PullRequest
2 голосов
/ 20 января 2020

Вот код HTML для поля электронной почты:

<div class="forge-form-group forge-col-12"><label class="">Email</label><input class="forge-form-control" data-fieldname="email" name="email" type="email" value=""><small class="forge-form-text forge-text-muted">Haven't signed up?<a class="forge-ml-2" href="#">Create an account</a></small></div>
<input class="forge-form-control" data-fieldname="email" name="email" type="email" value="">

Вот мой код Python:

email_cell=driver.find_element_by_xpath("//div[@class='forge-form-group forge-col-12']//input[@class='forge-form-control']")

Но проблема в том, что есть идентичное поле для пароля тоже. Он отличается от имени поля данных, которое эквивалентно паролю. Вот и этот фрагмент кода HTML:

<div class="forge-form-group forge-col-12"><label class="">Password</label><a class="forge-float-right" href="#">Forgot password?</a><input class="forge-form-control" data-fieldname="password" name="password" type="password" value=""></div>

Теперь я очень озадачен тем, как получить доступ к этим двум полям по отдельности. Страница, которую я автоматизирую, находится здесь: https://moz.com/login.

1 Ответ

3 голосов
/ 20 января 2020

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...