Поиск элемента в первом на странице div

alexbizal

Client
Регистрация
28.12.2015
Сообщения
24
Благодарностей
5
Баллы
3
Здравствуйте

Есть набор однотипных <div>, с одинаковым классом.
В каждом <div> может быть 0 (нет ничего), один или два <span class=t>текст</span>.

Пример:

<div class="sem">ненужныйТекст<span class=t>текст0</span>что-то_опять_неважное</div>
<div class="sem"><span class=t>текст1</span>блабла</div>
<div class="sem"></div>
<div class="sem"><span class=t>текст2</span>какой-то текст<span class=t>текст3</span>.</div>
<div class="sem"></div>

Необходимо получить innerText <span>-ов самого первого (нулевого) <div>.
Результат может быть пустой, может быть одно значение, а может быть и два.

В приведенном примере результат - это одно значение - "текст0"

Желательно без C#, но если это невозможно штатными средствами ZennoPoster, - буду благодарен и за С#

Спасибо!
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 642
Баллы
113
Желательно без C#
Спасибо!
Этот форум давно ждал героя, вроде тебя)

1. Кубиком через GET берешь иннертхтмл нулевого дива. Ищешь элемент по тому одинаковому классу
2. Парсишь регуляркой что-то типа (?<=<span class=t>)[\w\W]*?(?=</span>). Это будет иннерхтмл 0го спана.
3. Если внутри нужных спанов могут быть теги - чистишь полученное значение от них регуляркой <[^<]+> заменой на пустоту.

Если внутри спана могут быть другие спаны - такое может не прокатить
 
  • Спасибо
Реакции: AgentRassilok и ol1ver

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18
Код:
var tab = instance.ActiveTab;
if ((tab.IsNull) || (tab.IsVoid)) return -1;

project.Variables["Имя переменной куда сохранить"].Value = tab.MainDocument.EvaluateScript(@"
  return (() => {
       var items, a = [];
       items = document.querySelectorAll('.sem:nth-of-type(1) span'); //здесь CSS селектор для дива из твоего примера и иго потомков span
       for (var i = 0, l = items.length ; i < l ; ++i) {
         a.push(items.item(i).innerText);
       }
      return JSON.stringify(a.join()).slice(1, -1);
   })();
");

будет работать если и если используешь зеннку в режиме бродилки. CSS сделай исходя из реальных данных с которыми работаешь
 
  • Спасибо
Реакции: orka13

alexbizal

Client
Регистрация
28.12.2015
Сообщения
24
Благодарностей
5
Баллы
3
Этот форум давно ждал героя, вроде тебя)
1. Кубиком через GET берешь иннертхтмл нулевого дива. Ищешь элемент по тому одинаковому классу
2. Парсишь регуляркой что-то типа (?<=<span class=t>)[\w\W]*?(?=</span>). Это будет иннерхтмл 0го спана.
3. Если внутри нужных спанов могут быть теги - чистишь полученное значение от них регуляркой <[^<]+> заменой на пустоту.
Если внутри спана могут быть другие спаны - такое может не прокатить
Спасибо, думал, можно как-то через конструктор действий. Ушел спасать мир )
 

alexbizal

Client
Регистрация
28.12.2015
Сообщения
24
Благодарностей
5
Баллы
3
Код:
var tab = instance.ActiveTab;
if ((tab.IsNull) || (tab.IsVoid)) return -1;

project.Variables["Имя переменной куда сохранить"].Value = tab.MainDocument.EvaluateScript(@"
  return (() => {
       var items, a = [];
       items = document.querySelectorAll('.sem:nth-of-type(1) span'); //здесь CSS селектор для дива из твоего примера и иго потомков span
       for (var i = 0, l = items.length ; i < l ; ++i) {
         a.push(items.item(i).innerText);
       }
      return JSON.stringify(a.join()).slice(1, -1);
   })();
");

будет работать если и если используешь зеннку в режиме бродилки. CSS сделай исходя из реальных данных с которыми работаешь
Спасибо, тоже попробую
 

zennoX

Client
Регистрация
05.04.2014
Сообщения
484
Благодарностей
134
Баллы
43
xpath
 

izunag

Пользователь
Регистрация
23.08.2017
Сообщения
125
Благодарностей
26
Баллы
18

alexbizal

Client
Регистрация
28.12.2015
Сообщения
24
Благодарностей
5
Баллы
3

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