Webdriver. Как получить xpath найденного элемента?

#python #selenium #xpath #webdriver #children

#python #селен #xpath #webdriver #дочерние элементы

Вопрос:

У меня есть немного кода, который находит элемент на основе видимого текста.

 # Defines the text I am looking for
productName = "customer x job"
#Finds the element I am looking for
inputElement = driver.find_element_by_xpath(".//*[@id='demo_top']/div/table[2]/tbody/tr/td[1]/ul/li[2]/ul/li[1]/a".format(productName))
 

Мне нужно щелкнуть поле справа от этого.

Конкретный xpath элемента:

 #What I just found
/html/body/div[1]/div/div/table[2]/tbody/tr/td[1]/ul/li[2]/ul/li[1]/a
#The box I actually want to click
/html/body/div[1]/div/div/table[2]/tbody/tr/td[1]/ul/li[2]/ul/li[1]/span/a
 

Поэтому мне просто нужно добавить «/span / a» в xpath inputElement . Проблема в том, что я не знаю конкретного xpath этого элемента. Есть ли у меня способ преобразовать inputElement в определенный xpath, чтобы я мог просто добавить «/ span / a» в конец и щелкнуть этот элемент?

Редактировать: кажется, я ошибся, мне нужно заменить последнюю букву «a» на «span / a».

Ниже приведен html:

 <li class="TCbullet">
<span>
<a class="editCategory " onclick="return hs.htmlExpand(this, { objectType: 'iframe' } );" href="cat-frame-category.php?categoryID=1340"> </a>  #I want to click this
<span class="sort">sort: 0</span>
</span>
<a class="anchorCategory" alt="Eden Cognitive Content" href="?ownerID=C518amp;g=1085amp;t=1340">Eden Cognitive Content</a>  # I have found this
</li>
 

Я хочу получить доступ к ссылке editCatagory, и я нашел ссылку anchorCategory.

Ответ №1:

Вы можете вызвать find_element_by_xpath() элемент, который вы уже нашли:

 link = inputElement.find_element_by_xpath('./preceding-sibling::span/a')
 

Это позволит выбрать a тег внутри span , который следует a за найденным вами тегом.

Комментарии:

1. Спасибо! Я не понимал, что могу это сделать. Кажется, я был в чем-то неправ, и вы можете помочь. Похоже, я пропустил, что в конце первого xpath есть тег a. Есть ли способ заменить этот последний ‘a’ на ‘span / a’?

2. @user3784334 не могли бы вы показать соответствующий html, чтобы я мог быть уверен в структуре html? Спасибо. Просто отредактируйте вопрос и вставьте его туда.

3. @user3784334 хорошо, похоже, что span/a перед a тем, как вы нашли, отредактировали ответ — попробуйте preceding-sibling , должно сработать. Спасибо.