Я пытаюсь написать сценарий Python с Selenium для автозаполнения формы.
Есть несколько полей с автозаполнением. Я могу заполнить их и выбрать следующее:
field1 = driver.find_element_by_id("field-1")
field1.send_keys("input")
driver.find_element_by_xpath("//ul[1]/li[1]") #this clicks on the first autocomplete option
Это прекрасно работает.
Однако, чтобы перейти к следующей форме, мне нужно сначала смоделировать щелчок и обычно задержку на 5-8 секунд:
driver.find_element_by_xpath("//body").click()
time.sleep(delay)
Задержка обычно устанавливается на 8 секунд - хоть и меньше, и, кажется, время от времени она не срабатывает.
Есть ли более эффективный способ сделать это, избегая использования временной задержки?
Я подумал, что, возможно, мне нужно выйти из формы / позволить Selenium подтвердить, что автозаполнение было выбрано.
1 ответ
Вы можете использовать WebDriverWait
, чтобы дождаться, пока элемент будет расположен в новой форме. Таким образом, вам не придется явно объявлять функцию задержки, и код возобновит выполнение, как только появится новая форма.
Образец кода
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
browser = webdriver.Firefox()
browser.get("url")
delay = 3 # seconds
driver.find_element_by_xpath("//body").click()
try:
myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
print "new form is ready!"
# add your code here
except TimeoutException:
print "Loading took too much time!"
Вы также можете использовать любой другой метод поиска локатора.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.