Как взаимодействовать с глубоко вложенным html-объектом input с использованием библиотек Python и Selenium - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь взаимодействовать с html-объектом ввода имени пользователя и пароля, используя библиотеку python для веб-драйвера selenium.И хотя я могу взаимодействовать с большинством HTML-тегов, код, который у меня есть, не будет работать с глубоко вложенным тегом input для ввода имени пользователя и пароля.См. Прикрепленное изображение для

. Я пытался использовать модуль xpath сам по себе, а также пытался использовать WebDriverWait на случай, если элементы должны быть загружены до того, как появится доступ.Когда я пробовал WebDriverWait, код никогда не достигает timeoutException, он просто зависает в терминале времени выполнения, и мне приходится вручную его убивать.

chrome_options = Options()
#chrome_options.add_argument("--headless")
recollect_url = r"https://manage.recollect.net/admin"
driver = webdriver.Chrome("C:\Users\Jlong\Downloads\chromedriver_win32\chromedriver.exe",chrome_options=chrome_options)
driver.get(recollect_url)
pagesource = driver.page_source


try:
    myElem = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, "//input[@name='email']")))
    myElem2 = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CLASS_NAME, 'auth0-lock-input-block '
                                                                                            'auth0-lock-input-email')))

    print "Page is ready!"

except TimeoutException:

    print "Loading took too much time!"

HTML code

Я ожидаю, что смогу использовать send_keys() метод для имени пользователя и пароля, а затем использовать метод click для отправки для ввода учетных данных

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

Используйте WebdriverWait и следующий xpath.

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

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='auth0-lock-input'][@name='email']"))).send_keys('xyz@gmail.com')
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='auth0-lock-input'][@name='password']"))).send_keys('testuser')

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH,"//button[@class='auth0-lock-submit']//span[@class='auth0-label-submit'][contains(.,'Log In')]"))).click()

Выход:


enter image description here

0 голосов
/ 06 июня 2019

Чтобы вызвать метод send_keys() для имя пользователя и пароль , а затем использовать метод click() для кнопки LOG IN , чтобы войти через набор наборов действительные учетные данные, которые вы должны ввести WebDriverWait для element_to_be_clickable(), и вы можете использовать любую из следующих стратегий локатора :

  • Использование CSS_SELECTOR:

    driver.get('https://manage.recollect.net/admin')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.auth0-lock-input[name='email']"))).send_keys("Jeff_Long@stackoverflow.com")
    driver.find_element_by_css_selector("input.auth0-lock-input[name='password']").send_keys("JeffLong")
    driver.find_element_by_css_selector("button.auth0-lock-submit span.auth0-label-submit").click()
    
  • Использование XPATH:

    driver.get('https://manage.recollect.net/admin')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='auth0-lock-input' and @name='email']"))).send_keys("Jeff_Long@stackoverflow.com")
    driver.find_element_by_xpath("//input[@class='auth0-lock-input' and @name='password']").send_keys("JeffLong")
    driver.find_element_by_xpath("//button[@class='auth0-lock-submit']//span[@class='auth0-label-submit']").click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • Снимок браузера:

ReCollect

...