Имеется 5 элементов на вебстранице содержащих разный текст: 1,7,13,25,4.
Пример: 13
Как Я могу найти только содержащий "13", объявить его и далее продолжить работать только с ним?
Используйте xPath с поиском по текстовому полю:
Строго "13" будет выглядеть так:
//*[text()="13"]
Любая строка содержащая "13" (частичное совпадение) так:
//*[text()[contains(.,"13")]]
Что написано в этих xPath:
* - выберет все теги (элементы) в xml (html) разметке
[text()="13"] - из выбранных элементов будет искать те, у которых текстовое поле равно строго "13"
[text()[contains(.,"13")]] - сначала выберет все элементы с текстовым полем, то есть сначала применит функцию text(), а потом из всех элементов с текстовым полем будет искать те, в которых содержится строка "13" [contains(.,"13")]. Точка . в (.,"13") означает, что в элементах будут "смотреться" все текстовые элементы (их может быть несколько на один элемент (тег)).
UPD Согласно коду из скриншота, div под номером 1 можно идентифицировать вот так:
//div[@style="overflow: visible;" and .//*[text()="209"]]
Здесь @style="overflow: visible;" используется для того, что-бы явно указать на один из трёх div'ов, а не выбирать все div'ы дочерним элементом которых будет текст "209".
Потом логический оператор and.
И в конце условие, что тот div у которого @style="overflow: visible;" должен иметь где-то там внизу элемент с текстом "209"
UDP2 На счёт подстановки значения в строку. Я пишу на Python 3, поэтому синтаксис в примерах будет отличаться от вашего в C#.
Есть 2 варианта:
one = '//div[@style="overflow: visible;" and .//*[text()="'
two = 209
three = '"]]'
xpath = one + str(two) + three
Вы меняете только вторую часть строки и складываете три строки:
Причём str(two) - это приведение типа int (целого числа 11) в тип str (строки вида "11"). В C# приведение в строку по моему делается с помощью .ToString().
.format(), погуглите подобную функицю для C#. Логика такой функции заключается в том, что вы в готовой строке специальным символом фигурных скобок {} отмечаете место вставки нужного вам значения. xpath = '//div[@style="overflow: visible;" and .//*[text()="{}"]]'
xpath.format(11)
UPD3
Что-бы к адресу //div[@style='overflow: visible;' and .//span[text()='209' ]] добавить уточнение самого span вам нужно не просто вставить and с новым требованием, а вставить их в нужное место. И давай-те разберёмся куда))
По смыслу xPath - //div[@style='overflow: visible;' and .//span[text()='209' ]] можно разделить на три части:
1-я часть та, которая указывает на то, какой элемент нам нужно найти - //div. Мы ищем div элемент. Но мы же ищем не все div элементы а конкретный, поэтому добавим к div'у условие, по которому мы его будем искать - //div[]. Добавились квадратные скобки, которые значат, что мы хотим искать div по условию внутри этих скобок.
Итог 1-й части - //div[]
2-я часть. Мы знаем что одно из условий это - @style="overflow: visible;", но сейчас назовём его условие1. И тогда, так будет выглядеть код - //div[условие1]. Но мы же выяснили, что нам так же требуется и ещё одно условие - .//span[text()="209"] - назовём условие2. И кончено же мы знаем что оператор and соединяет наши условия. Получается так - //div[условие1 and условие2]. Но, во втором условии тоже есть скобки квадратные что с ними то? А это как раз 3-я часть)
Итог 2-й части - //div[условие1 and условие2]
3-я часть.
Во втором условии есть квадратные скобки, в котором и находится условие относительно текстового поля у элемента span. То есть, если нам нужны условия относительно span элемента, то нам нужны именно эти скобки. То есть на самом деле, условие с .//span[text()="209"] выглядит не как условие2, а как условие2[условие3]. То есть наш конечный xPath выглядит так - //div[условие1 and условие2[условие3]]. И тут наконец наступает кульминация, и мы с вами начинаем понимать, в какие скобки нам нужно вставить дополнительное условие к элементу span - //div[условие1 and условие2[условие3 and условие4]].
И конечно же, наш итоговый xPath будет выглядеть так:
//div[@style='overflow: visible;' and .//span[text()='209' and @class='cool']]
Продвижение своими сайтами как стратегия роста и независимости