К сожалению, метод selenium find_element ожидает элемент в качестве возвращаемого значения, поэтому мы не можем использовать //pre/text()[1]
для ввода или //pre/text()[2]
для вывода. Таким образом, мы должны передать JavaScript, чтобы получить желаемый результат.
Простой подход заключается в использовании метода, который будет извлекать текст из заданной позиции в элементе. Вы можете использовать этот метод в своем приложении, поэтому предпочли бы этот метод.
Примечание: textPosition
в методе - это не что иное, как индекс текстового узла. Например, в этом случае входное значение является первым текстовым узлом, выходное значение - вторым текстовым узлом.
def get_text_from_parent_by_postion(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){
textValue = child.textContent;
break;
}}else{txtPosition+=1;}
child = child.nextSibling;
}
return textValue;""",
element, textPosition).strip()
Как это назвать в вашем случае:
# print input
print(get_text_from_parent_by_postion(driver.find_element_by_tag_name("pre"),1))
#print output
print(get_text_from_parent_by_postion(driver.find_element_by_tag_name("pre"),2))