Попытка найти два разных текстовых узла от потомка - PullRequest
0 голосов
/ 22 апреля 2020

Кто-то решил сделать сайт настолько недружелюбным, насколько это возможно, намеренно, поэтому я стараюсь изо всех сил, чтобы наш скребок по-прежнему находился там, где и должен.

<div class="issueDetails">
 <div class="issueTitle ng-binding" style="">FANCY UNIQUE TEXT dd.MM.yyyy</div>
 <a>COMPLETELY DIFFERENT TEXT</a>

Я оставил ненужные подробности здесь, но я пытаюсь найти соответствие на сайте через XPATH (не могу использовать для этого ничего другого), которое найдет что-то, удовлетворяющее обоим условиям, FANCY UNIQUE TEXT dd.MM.yyyy *, а также ПОЛНОСТЬЮ РАЗЛИЧНЫЙ ТЕКСТ.

Я попытал счастья с //div[@class='issueDetails']/descendant::*[contains(text(), 'FANCY UNIQUE TEXT dd.MM.yyyy') and contains (text(), 'COMPLETELY DIFFERENT TEXT')]

, но он содержит ошибочные логи c, которые обе уникальные вещи, которые я нужно одно и то же.

Первый, FANCY UNIQUE TEXT, это уникальный идентификатор, где я хочу go. Второй, ПОЛНОСТЬЮ РАЗЛИЧНЫЙ ТЕКСТ, - это то, что мне нужно, чтобы щелкнуть скребком, чтобы фактически перейти к указанному c. Поэтому необходим XPath, который находит обоих, несмотря на то, что они являются разными потомками.

1 Ответ

0 голосов
/ 22 апреля 2020

Это то, что вы ищете:

//div[@class="issueDetails"]/*[contains(.,"COMPLETELY DIFFERENT TEXT") or translate(substring(.,string-length(.)-9,10),"123456789","000000000")="00.00.0000" and contains(.,'FANCY UNIQUE TEXT')]

Он вернет 2 элемента, соответствующих вашим условиям: div и a. Функции Translate, substring-length и substring используются для проверки наличия шаблона даты в элементе div.

date

РЕДАКТИРОВАТЬ: Проверьте, содержит ли родитель + дочерний элемент текст, который вы ищете, затем найдите дочерние элементы с помощью:

//div[@class='issueDetails'][contains(.,"FANCY UNIQUE TEXT dd.MM.yyyy") and contains(.,"COMPLETELY DIFFERENT TEXT")]/*[contains(.,"FANCY UNIQUE TEXT dd.MM.yyyy") or contains(.,"COMPLETELY DIFFERENT TEXT")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...