#python #selenium-webdriver
#python #selenium-webdriver
Вопрос:
На этом веб-сайте я пытаюсь найти элемент на основе его XPATH, но XPATH продолжает меняться. Какова следующая лучшая альтернатива?
Фрагмент с веб-сайта
<button class="KnkXXg vHcWfw T1alpA kiPMng AvEAGQ vM2UTA DM1_6g _-kwXsw Mqe1NA SDIrVw edrpZg" type="button" aria-expanded="true"><span class="nW7nAQ"><div class="VpIG5Q"></div></span></button>
XPATH:
//*[@id="__id15"]/div/div/div[1]/div[2]/div
#Sometimes id is a number between 15-18
//*[@id="__id23"]/div/div/div[1]/div[2]/div
#Sometimes id is a number between 13-23
Вот как я использую код:
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, """//*[@id="__id3"]/div/div/div[1]/div[2]/div/div/div/button"""))).click()
Я попытался щелкнуть элемент, найдя класс button, но по какой-то причине он ничего не сделает.
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "KnkXXg vHcWfw T1alpA kiPMng AvEAGQ vM2UTA DM1_6g _-kwXsw Mqe1NA SDIrVw edrpZg"))).click()
Комментарии:
1. Я бы посмотрел на селекторы CSS, они могут быть более гибкими, если все сделано правильно. Они не сломаются, если переместить местоположение компонента. Использование имен классов с именами дочерних классов позволило бы извлекать элементы без необходимости знать подробности об иерархии.
2. Я пытаюсь найти элемент на основе его XPATH, но XPATH продолжает меняться. Вы пробовали написать более точный / гибкий XPath? Какова следующая лучшая альтернатива? Вы ознакомились с документацией?
Ответ №1:
Если часть текста постоянно меняется, вы можете использовать contains в xpath.
//*[contains(@id,"__id"]/div/div/div[1]/div[2]/div