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

sibbora

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

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
791
Баллы
113
че спрашиваете? пробуйте сами!
если InnerHtml будет атрибутом дом обьекта, то да. Но я думаю так лучше не делать.
 
  • Спасибо
Реакции: sibbora и KirillOFF

KirillOFF

Client
Регистрация
18.12.2010
Сообщения
1 127
Благодарностей
517
Баллы
113

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28
За гугл спасибо, вроде хороший сайт, гляну на досуге. Юмористы блин...

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

P.S. Правильно работает так:
Код:
FindElementByXPath("//div[text()='Выбор регионов']"
 
  • Спасибо
Реакции: Sanekk

sibbora

Client
Регистрация
23.11.2013
Сообщения
149
Благодарностей
73
Баллы
28
Блин, ну до чего же крутая штука! Вот например, как можно отобрать только те элементы, в потомках которых содержится определённый текст:

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

Код:
//form[@id='myadvq']/table[@id='list']/tbody/tr[td[contains (text(),'агентство рекламы')]]
 
  • Спасибо
Реакции: mig-z и CSS

KirillOFF

Client
Регистрация
18.12.2010
Сообщения
1 127
Благодарностей
517
Баллы
113
Молодец, смотрю освоил таки гугл :D А еще ругался на меня)
 

mig-z

Client
Регистрация
05.12.2014
Сообщения
305
Благодарностей
71
Баллы
28
Блин, ну до чего же крутая штука! Вот например, как можно отобрать только те элементы, в потомках которых содержится определённый текст:
Получаем элемент, если есть вложенный, отвечающий критериям:
Код:
//form[@id='myadvq']/table[@id='list']/tbody/tr[td[contains (text(),'агентство рекламы')]]
А как написать xpath если нужно найти элемент (кнопку) которая находится в соседнем диве от дива в котором мы ищем по переменно.

Example:
HTML:
<div> // головной див который содержит оба дива.
   <div>
Искомое значение из переменной по которому ищем див.
   </div>
   <div>
Кнопка которую нажимаем
   </div>
</div>
 

budora

Client
Регистрация
13.08.2012
Сообщения
831
Благодарностей
556
Баллы
93
А как написать xpath если нужно найти элемент (кнопку) которая находится в соседнем диве от дива в котором мы ищем по переменно.

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

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
А как написать xpath если нужно найти элемент (кнопку) которая находится в соседнем диве от дива в котором мы ищем по переменно.

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

JurgenZolle

Client
Регистрация
19.09.2018
Сообщения
135
Благодарностей
20
Баллы
18
спрошу здесь. допустим есть код
HTML:
<h1>
    <span>
        <a href="/artist/ABBA">ABBA</a>
    </span>
        Waterloo
</h1>

мне нужно достать этот текст Waterloo и засунуть в переменную.
допустим, xpath к нему "//h1/text()"
сейчас приходится доставать его регулярками. нет ли чего-нибудь типа
instance.ActiveTab.FindElementByXPath(xpath,0).Text()?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113

JurgenZolle

Client
Регистрация
19.09.2018
Сообщения
135
Благодарностей
20
Баллы
18

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
можно вас попросить написать реализацию получения этого текста в переменную, скажем text?
К сожалению сейчас мало свободного времени. Посмотрите видеоуроки по работе с программой и с переменными. Или на форуме есть статья по работе с xpath на примере яндекс маркета, там вроде и про переменные было.
 

JurgenZolle

Client
Регистрация
19.09.2018
Сообщения
135
Благодарностей
20
Баллы
18
К сожалению сейчас мало свободного времени.
и здесь вы его потратили зря))
я просил не составить xpath, задача - забрать найденный текст в переменную
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
и здесь вы его потратили зря))
я просил не составить xpath, задача - забрать найденный текст в переменную
Ок. тогда на ваши вопросы вообще не буду больше терять время ))
Вы хотите экономить свое время, но тратить свое время на свое же обучение, не хотите.
 

JurgenZolle

Client
Регистрация
19.09.2018
Сообщения
135
Благодарностей
20
Баллы
18

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
43

JurgenZolle

Client
Регистрация
19.09.2018
Сообщения
135
Благодарностей
20
Баллы
18
var tab = instance.ActiveTab;
var res = tab.FindElementByXPath("//h1",0).GetAttribute("innertext");
res = res.Substring(res.IndexOf('–') + 1);
Можно так
спасибо, но это будет работать для конкретной страницы и для других, где в названии исполнителя не будет такого же дефиса. и все сломается, если попадется, скажем, БИ – 2 – Клинч.
я пытаюсь понять, реально ли вытащить текст из HTML, у которого нет никаких тэгов, напрямую в переменную.
 

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
43
Можно получить название группы и удалить из строки.
Тогда ни чего не сломается
 

JurgenZolle

Client
Регистрация
19.09.2018
Сообщения
135
Благодарностей
20
Баллы
18
Можно получить название группы и удалить из строки.
именно так у меня сейчас и реализовано. но не это задача. вопрос более обширен, чем данный пример. это просто пример.
вопрос - реально ли вытащить текст из HTML, у которого нет никаких тэгов, напрямую в переменную.
 

viol2021

Client
Регистрация
12.01.2021
Сообщения
482
Благодарностей
180
Баллы
43
Нужно копать в сторону, как взять текст после определённого тега.
В вашем случае после <span>
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
C#:
.//h1/descendant::text()[following-sibling::span]
 

JurgenZolle

Client
Регистрация
19.09.2018
Сообщения
135
Благодарностей
20
Баллы
18
мне нужен не xpath, мне нужна сама реализация в зено, чтобы получить напрямую значение текста без тэгов и занести его в переменную. и реально ли это вообще.
84872
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93

JurgenZolle

Client
Регистрация
19.09.2018
Сообщения
135
Благодарностей
20
Баллы
18

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
Ты сам не пробовал, и у меня спрашиваешь!
Да - это будет работать!
не работает это. пустоту получает. типа элемент не найден в PM, хотя если в хроме проверять, то он найден
 

JurgenZolle

Client
Регистрация
19.09.2018
Сообщения
135
Благодарностей
20
Баллы
18
что ты флиртуешь как девочка. уверен, что работает - напиши свой рабочий код.
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#  Результат:
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
что ты флиртуешь как девочка. уверен, что работает - напиши свой рабочий код.
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# ?
 

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