У меня есть этот элемент, и я хочу получить доступ к его Xpath по коду не найти элемент по Xpath, например find_element(By.XPATH,'myXpath'), а не получать xpath вручную в браузере.
today = driver.find_element(By.CLASS_NAME,'today')
day = today.get_attribute("data-day")
xpathString = today.get_xpath() # <--- this function doesn't exist
мы можем получить атрибут элемента с помощью функции получить_атрибут(), но я не смог найти функцию, которая возвращает Xpath элемента.
пожалуйста, это возможно? заранее спасибо!
Это возвращает полный xpath элемента el
, имя класса которого today
, то есть /html/.../el
xpathString = driver.execute_script("""
var el = arguments[0];
aPath ="";
while (el.tagName!='HTML'){
parentEle=el.parentNode;
if(parentEle.querySelectorAll(el.tagName).length>1){
childIndex = 0;
parentEle.querySelectorAll(el.tagName).forEach(function(cEle){
childIndex= childIndex+1;
if(cEle === el){
aPath = el.tagName + "[" + childIndex + "]" + "/" +aPath;
}
})
}else{
aPath = el.tagName + "/" +aPath;
}
el=el.parentNode;
}
return "/html/"+aPath.substring(0,aPath.length-1).toLowerCase();
""", today)
@YassineBagdad Например, полный xpath ответа (#answer-72273462
), который можно найти в инструменте инспектора, равен /html/body/div[3]/div[2]/div/div[1]/div[3]/div[2]/div[2]
. Вы имеете в виду это?
да точно, я хочу получить вот такой элемент, который мы уже нашли, спасибо.
@YassineBagdad Я обновил ответ
Спасибо большое !! ты удивительный !! есть ли способ создать короткую форму XPath, например: "//*[@id="datePickerDesk"]/div/ul/li[1]/div/div[1]/table/tbody/tr[ 4]/тд[2]" ? но большое спасибо, это уже так полезно !!
спасибо за ваш ответ, моя цель - получить строку Xpath элемента, который я уже нашел по class_name, а не получить элемент по Xpath. Типа: "xpathString = today.get_xpath()", но этой функции не существует.