Хорошо, в конце концов я пишу два метода на python. Один для извлечения только родительского текстового содержимого (дочерний текст не включен), а другой для извлечения содержимого на основе позиции текстового узла.
Примечание. Если вы хотите использовать эти методы на других языках, обязательно обновите driver.execute_script
и 'strip () `в соответствии с вашим языком. (использовал strip () для обрезки возвращаемого значения).
Метод 1: get_text_exclude_children (элемент)
# параметр - элемент
# return - только текст элемента (дочерний текст будет исключен)
def get_text_exclude_children(element):
return driver.execute_script(
"""
var parent = arguments[0];
var child = parent.firstChild;
var textValue = "";
while(child) {
if (child.nodeType === Node.TEXT_NODE)
textValue += child.textContent;
child = child.nextSibling;
}
return textValue;""",
element).strip()
Метод 2: get_text_from_parent_by_position (element, textPostion)
# параметр - элемент
# параметр - textPostion (начинается с 1, укажите индекс возвращаемого текстового узла)
# return - родительский текст, указанный в позиции
def get_text_from_parent_by_position(element,textPosition=1):
return driver.execute_script(
""" var parent = arguments[0];
var textPosition = arguments[1];
var txtPosition = 0;
var child = parent.firstChild;
var textValue="";
while(child) {
if (child.nodeType === 3){
if (txtPosition===(textPosition-1)){
textValue = child.textContent;
break;
}}else{txtPosition+=1;}
child = child.nextSibling;
}
return textValue;""",
element,textPosition).strip()
Как использовать эти методы
myList = elementList[0].find_elements_by_xpath("/some/xpath")
listElement = myList[0]
onlyParentText = get_text_exclude_children(listElement)
onlyFirstTextNode = get_text_from_parent_by_position(listElement,1)
print("only parent text: " + onlyParentText)
print("First TextNode text: " + onlyFirstTextNode)