Chropath для селена xpath не работает? - PullRequest
1 голос
/ 23 февраля 2020

Я установил chropath для определения xpath для веб-сайтов.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome("C:\\Users\\ADMIN\\Downloads\\chromedriver_win32\\chromedriver.exe")

driver.get("https://kite.zerodha.com")

username = driver.find_element_by_xpath("//input[@placeholder='User ID']")
username.send_keys("abcc")

Я хотел найти имя пользователя xpath с помощью chropath, и он дал мне //input[@placeholder='User ID'], но все равно выдает ошибку NoSuchElementException. Я думал, что расширение chropath всегда даст мне правильный xpath. Что может быть причиной этого?

Это код, который я получаю при проверке имени пользователя

<input type="text" placeholder="User ID" autocorrect="off" maxlength="6" autofocus="autofocus" autocapitalize="characters" animate="true" label="" rules="[object Object]" dynamicwidthsize="8" xpath="1">

Ответы [ 2 ]

2 голосов
/ 24 февраля 2020

Функционально был верным, чтобы найти для нужного элемента. Однако, поскольку элемент имеет атрибут animate="true", когда элемент получает курсор focus , атрибут placeholder="User ID" изменяется в результате Selenium не может найти элемент.


Решение

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

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

    driver.get('https://kite.zerodha.com/')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[text()='User ID']//following-sibling::input[1]"))).send_keys("TANMAY")
    
  • Использование CSS_SELECTOR:

    driver.get('https://kite.zerodha.com/')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label.su-input-label.su-dynamic-label + input"))).send_keys("TANMAY")
    
  • Примечание : Вы должны добавить следующие импорта:

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

zerodha

0 голосов
/ 23 февраля 2020

Я проверил ваш код, и я думаю, что он правильный, однако, я думаю, что вы могли пропустить элемент .click(). Чтобы убедиться, что элементы присутствуют, вы можете сделать следующее, где я добавил дополнительное время ожидания для загрузки элементов.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# Handle wait time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0

driver = webdriver.Chrome("C:\\Users\\ADMIN\\Downloads\\chromedriver_win32\\chromedriver.exe")

driver.get("https://kite.zerodha.com")

wait = WebDriverWait(driver, 60)

username = wait.until(EC.presence_of_element_located((By.XPATH, "//input[@placeholder='User ID']")))
username.click()
username.send_keys("abcc")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...