Имеется 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']]
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Задумался как сделать логичнее (правильнее)Есть два класса: один ставит лайки в нём два метода лайки по тэгу и лайки по геолокации, второй...
Собственно есть такой код, где в цикле создаются PictureBox
Подскажите как загуглить что бы почитать о операторе/ключевом слове where в такой конструкции например:
Нужно подсчитать сумму ячеек для каждой строки таблицы dataGridViewКол-во строк и столбцов заранее не известно