Как построить css_selector для работы с Selenium и Python - PullRequest
0 голосов
/ 20 января 2020

Используя CSS селектор в селене python, я пытаюсь автоматически войти на веб-страницу.

Вместо использования:

driver.find_element_by_id()

Я хочу попрактиковаться в использовании:

driver.find_elements_by_css_selector()

Итак, я закодировал это как:

userId = driver.find_elements_by_css_selector('input[id = "pass"]')
userId.send_keys('blabla78945@gmail.com')

Но он не найдет элемент, в который он должен быть напечатан. В чем проблема этого случая?

1 Ответ

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

Вы были достаточно близко. Если вы смогли отправить последовательность символов внутри нужного элемента, используя find_elements_by_id() следующим образом:

userId = driver.find_element_by_id('pass')
userId.send_keys('blabla78945@gmail.com')

Использование в качестве Стратегия локатора Вы можете достичь того же, что и в следующем случае:

  • Использование атрибута id только в качестве css_selector:

    userId = driver.find_element_by_css_selector("#pass")
    userId.send_keys('blabla78945@gmail.com')
    
  • Использование tagName <input> вместе с атрибутом id в качестве css_selector:

    userId = driver.find_element_by_css_selector("input#pass")
    userId.send_keys('blabla78945@gmail.com')       
    

Примечание : вам нужно использовать find_element_by_css_selector(), который возвращает желаемый webelement, где find_elements_by_css_selector() возвращает список , и вы не можете вызвать send_keys() для Список .


Однако, если вы пытаетесь получить доступ к нужному элементу сразу после загрузки новой страницы, в идеале вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любую из следующих Стратегий локатора :

  • Использование атрибута id в качестве CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#pass"))).send_keys("blabla78945@gmail.com")
    
  • Использование т he tagName <input> вместе с атрибутом id как CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#pass"))).send_keys("blabla78945@gmail.com")
    
  • Примечание : необходимо добавить следующие импортные:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
...