Ещё пара вопросов по XPath

  • Автор темы Автор темы sibbora
  • Дата начала Дата начала

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Реакции
73
Баллы
28
В продолжение предыдущей темы:
1. Может кто подсказать, где посмотреть синтаксис XPath, реализованный именно в ZennoPoster? Регулярки, как я уже понял, не поддерживаются. А другие функции (например, описанные здесь)?
2. Можно ли в пути каким-то образом использовать InnerHtml? Что-то вроде //div/div/span[@InnerHtml='КнопкаОбласть'???]
 
че спрашиваете? пробуйте сами!
если InnerHtml будет атрибутом дом обьекта, то да. Но я думаю так лучше не делать.
 
  • Спасибо
Реакции: sibbora и KirillOFF
За гугл спасибо, вроде хороший сайт, гляну на досуге. Юмористы блин...

Пробовал такие варианты (ещё до создания темы):
  1. //div[@InnerHtml='Выбор регионов']
  2. //div[@innerhtml='Выбор регионов']
  3. //div[@innerHTML='Выбор регионов']
  4. //div[@text='Выбор регионов']
  5. И другие...
По поиску лазил, но за 10 минут решения не нашёл. Почему бы не спросить народ на форуме? Если нет времени или желания отвечать предметно - лучше пройдите мимо.

P.S. Правильно работает так:
Код:
Развернуть Свернуть Копировать
FindElementByXPath("//div[text()='Выбор регионов']"
 
  • Спасибо
Реакции: Sanekk
Блин, ну до чего же крутая штука! Вот например, как можно отобрать только те элементы, в потомках которых содержится определённый текст:

Получаем элемент, если есть вложенный, отвечающий критериям:

Код:
Развернуть Свернуть Копировать
//form[@id='myadvq']/table[@id='list']/tbody/tr[td[contains (text(),'агентство рекламы')]]
 
  • Спасибо
Реакции: mig-z и CSS
Молодец, смотрю освоил таки гугл :D А еще ругался на меня)
 
Блин, ну до чего же крутая штука! Вот например, как можно отобрать только те элементы, в потомках которых содержится определённый текст:
Получаем элемент, если есть вложенный, отвечающий критериям:
Код:
Развернуть Свернуть Копировать
//form[@id='myadvq']/table[@id='list']/tbody/tr[td[contains (text(),'агентство рекламы')]]

А как написать xpath если нужно найти элемент (кнопку) которая находится в соседнем диве от дива в котором мы ищем по переменно.

Example:
HTML:
Развернуть Свернуть Копировать
<div> // головной див который содержит оба дива.
   <div>
Искомое значение из переменной по которому ищем див.
   </div>
   <div>
Кнопка которую нажимаем
   </div>
</div>
 
А как написать xpath если нужно найти элемент (кнопку) которая находится в соседнем диве от дива в котором мы ищем по переменно.

Example:
HTML:
Развернуть Свернуть Копировать
<div> // головной див который содержит оба дива.
   <div>
Искомое значение из переменной по которому ищем див.
   </div>
   <div>
Кнопка которую нажимаем
   </div>
</div>
Ставишь в мозиле дополнение FirePath и правым кликом Inspect in FirePath получаешь нужное значение
 
  • Спасибо
Реакции: Astraport
А как написать xpath если нужно найти элемент (кнопку) которая находится в соседнем диве от дива в котором мы ищем по переменно.

Example:
HTML:
Развернуть Свернуть Копировать
<div> // головной див который содержит оба дива.
   <div>
Искомое значение из переменной по которому ищем див.
   </div>
   <div>
Кнопка которую нажимаем
   </div>
</div>
По деревянному если то примерно так это выглядит:
Код:
Развернуть Свернуть Копировать
//div[@class='признак']/../div[1]
Первый див в примере - тот для которого есть признак, второй - соседний, но позиция его определяется порядковым номером от родительского дива, у вас она может быть отличной от 1
 
  • Спасибо
Реакции: mig-z
спрошу здесь. допустим есть код
HTML:
Развернуть Свернуть Копировать
<h1>
    <span>
        <a href="/artist/ABBA">ABBA</a>
    </span>
        Waterloo
</h1>


мне нужно достать этот текст Waterloo и засунуть в переменную.
допустим, xpath к нему "//h1/text()"
сейчас приходится доставать его регулярками. нет ли чего-нибудь типа
instance.ActiveTab.FindElementByXPath(xpath,0).Text()?
 
можно вас попросить написать реализацию получения этого текста в переменную, скажем text?
К сожалению сейчас мало свободного времени. Посмотрите видеоуроки по работе с программой и с переменными. Или на форуме есть статья по работе с xpath на примере яндекс маркета, там вроде и про переменные было.
 
и здесь вы его потратили зря))
я просил не составить xpath, задача - забрать найденный текст в переменную
Ок. тогда на ваши вопросы вообще не буду больше терять время ))
Вы хотите экономить свое время, но тратить свое время на свое же обучение, не хотите.
 
var tab = instance.ActiveTab;
var res = tab.FindElementByXPath("//h1",0).GetAttribute("innertext");
res = res.Substring(res.IndexOf('–') + 1);
Можно так
спасибо, но это будет работать для конкретной страницы и для других, где в названии исполнителя не будет такого же дефиса. и все сломается, если попадется, скажем, БИ – 2 – Клинч.
я пытаюсь понять, реально ли вытащить текст из HTML, у которого нет никаких тэгов, напрямую в переменную.
 
Можно получить название группы и удалить из строки.
Тогда ни чего не сломается
 
Можно получить название группы и удалить из строки.
именно так у меня сейчас и реализовано. но не это задача. вопрос более обширен, чем данный пример. это просто пример.
вопрос - реально ли вытащить текст из HTML, у которого нет никаких тэгов, напрямую в переменную.
 
Нужно копать в сторону, как взять текст после определённого тега.
В вашем случае после <span>
 
C#:
Развернуть Свернуть Копировать
.//h1/descendant::text()[following-sibling::span]
 
мне нужен не xpath, мне нужна сама реализация в зено, чтобы получить напрямую значение текста без тэгов и занести его в переменную. и реально ли это вообще.
84872
 
Ты сам не пробовал, и у меня спрашиваешь!
Да - это будет работать!
не работает это. пустоту получает. типа элемент не найден в PM, хотя если в хроме проверять, то он найден
 
что ты флиртуешь как девочка. уверен, что работает - напиши свой рабочий код.
C#:
Развернуть Свернуть Копировать
string xpath = "//h1";
string text = instance.ActiveTab.FindElementByXPath(xpath,0).InnerText;
return text;
Код:
Развернуть Свернуть Копировать
Выполнение кода C#  Результат: ABBA – Waterloo
но мне нужно другое. меняю xpath
C#:
Развернуть Свернуть Копировать
string xpath = "//h1/text()[2]";
string text = instance.ActiveTab.FindElementByXPath(xpath,0).InnerText;
return text;
Код:
Развернуть Свернуть Копировать
Выполнение кода C#  Результат:
 
что ты флиртуешь как девочка. уверен, что работает - напиши свой рабочий код.
C#:
Развернуть Свернуть Копировать
string xpath = "//h1";
string text = instance.ActiveTab.FindElementByXPath(xpath,0).InnerText;
return text;
Код:
Развернуть Свернуть Копировать
Выполнение кода C#  Результат: ABBA – Waterloo
но мне нужно другое. меняю xpath
C#:
Развернуть Свернуть Копировать
string xpath = "//h1/text()[2]";
string text = instance.ActiveTab.FindElementByXPath(xpath,0).InnerText;
return text;
Код:
Развернуть Свернуть Копировать
Выполнение кода C#  Результат:
код работает. он просто работает без чудес. если найдет элемент , то вернет текст из него. не найдет не вернет. что еще надо ?
сам же пример привел, что при верном xpath все работает, а если херню написать как во 2-м примере, то и не вернет ничего.
Тут только один вопрос, а xpath то умеем составлять и проверять, до того как его запихать в c# ?
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)