Получить Dom-модель

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
Дамы и господа! Нужна помощь как не опытному в этом деле примерно в следующем:

1. Получение Dom-модель текущей страницы прямо в сниппете и загнать в переменную
2. С переменной выпарсить всё регуляркой и записать результат в список

За ответы благодарю! :-)
 
Последнее редактирование:

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
Хотя бы класс при помощи которого можно получить dom-модель.
Можно конечно FindElementByAttribute указать, но мне нужно именно dom...
 
Последнее редактирование:

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
528
Баллы
93
Вставляешь в кубик "Свой си# код"
return instance.ActiveTab.DomText;
Вернет тебе DOM-модель активной вкладки
 
  • Спасибо
Реакции: DragonBlack и proffman

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
Делал так Tab dom = instance.ActiveTab.DomText; :D
Потому и не работало... Спасибо =)
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
даже без кода можно
эти данные лежат в обычной переменной {-Page.Dom-}
 
  • Спасибо
Реакции: DragonBlack и proffman

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
Вставляешь в кубик "Свой си# код"
return instance.ActiveTab.DomText;
Вернет тебе DOM-модель активной вкладки
Еще подскажи пожалуйста что тут добавить instance.ActiveTab.DomText; чтобы можно было указать регуляру, чтобы парсить только то что нужно... И еще, указать номер совпадения скажем 0, а если в список добавлять, то вместо 0 что нужно будет указать?
Извиняюсь за тупые вопросы.. В этом деле я новичок, потому не пинайте сильно))
 

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
528
Баллы
93
Еще подскажи пожалуйста что тут добавить instance.ActiveTab.DomText; чтобы можно было указать регуляру, чтобы парсить только то что нужно... И еще, указать номер совпадения скажем 0, а если в список добавлять, то вместо 0 что нужно будет указать?
Извиняюсь за тупые вопросы.. В этом деле я новичок, потому не пинайте сильно))
Так под это все дело именно снипет принципиально нужен? Зачем все так усложнять, тем более новичку.
Все это реализовано в стандартном кубике (экшене). Табы->Данные->Взять DOM. В экшене устанавливаете галочку "Парсить данные" - вставляете в поле регулярку. У Вас выскакивают варианты выбора - парсить одно совпадение в переменную, или все в список.
 
  • Спасибо
Реакции: DragonBlack

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
Нет, как раз нужно в C# всё реализовать)) пм знаю как свои 5 пальцев, просто бывают ситуации когда без C# не обойтись, шаблон в таком случае выполняется довольно медленно...
Вот как раз пару дней назад решил что потихоньку нужно переходить на C#, хотя бы базовые элементарные вещи усвоить, которые помогут повысить быстродействие шаблона.
Вот нашел, единственное не знаю как получить 2,3,и.т. совпадение
Код:
string regex = "[а-я]+";
string text =  "просто текст обычный";
var reg = new System.Text.RegularExpressions.Regex(regex, System.Text.RegularExpressions.RegexOptions.None);
//сохраняем результат в нужную переменную, не дожидаясь перитонита
project.Variables["codeResult"].Value = reg.Matches(text)[0].ToString();
return reg.Matches(text)[0];
Пробовал экспериментировать с .RegexOptions.None, ничего не получилось.. Нужно чтобы можно было указать номер совпадения, а еще лучше вместо него сохранить всё в список.
Или хотя бы указать номер совпадения..
 

evgen_po

Client
Регистрация
27.08.2013
Сообщения
848
Благодарностей
528
Баллы
93
Код:
var list = project.Lists["result"];
string regex = "[а-я]+";
string text =  "просто текст обычный";
var reg = new System.Text.RegularExpressions.Regex(regex, System.Text.RegularExpressions.RegexOptions.None);
int list_count = reg.Matches(text).Count;
for (int i=0; i<list_count; i++)
{
    list.Add(reg.Matches(text)[i].ToString());
}
Как-то так...
 
Последнее редактирование:
  • Спасибо
Реакции: DragonBlack и proffman

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
Всё работает, спасибо за помощь!!! :-)
 

proffman

Client
Регистрация
24.01.2013
Сообщения
547
Благодарностей
51
Баллы
28
Все таки, обычным экшином спарсить дом в список получается быстрее чем через спипет. Но в остальном, всё быстро получается... evgen_po ещё раз огромное спасибо!
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 500
Благодарностей
1 263
Баллы
113
Попробуй вот так
C#:
var rezultList = project.Lists["Список на выходе"];
var dom = instance.ActiveTab.DomText;
var regular = project.Variables["Регулярка"].Value;

var lst = Regex.Matches(dom, regular).Cast<Match>().Select(x=>x.Value).ToList();
rezultList.AddRange(lst);
 
  • Спасибо
Реакции: artur23

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