C# помощь для парсинга

phelix

Пользователь
Регистрация
28.04.2021
Сообщения
62
Благодарностей
13
Баллы
8
Есть такой код:
-------------------------------------------------

HtmlElement ui = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("span", "innerhtml", "isn\'t\\ available", "regexp", 0);
if (ui.IsVoid) throw new Exception("not found, page not loaded");


-------------------------------------------------


Этот код определяет текст "isn't available" на странице HTML, в случае его отсутствие отвечает отрицательно, позволяя зенки продолжать по логике.

Проблема:

1) Есть другие варианты текста которых надо чекать:


К примеру:

Positive (keywords):
- pear
- apple
- banana
- isn't available

Как сделать чтоб в ОДНОМ С# скрипте они все чекались?
Т.е. можно ли добавить здесь OR statement?


2.
Как сделать так чтоб при нахождениях определённого keyword (ex. pear, apple, etc) C# по выходу отмечал в какую-то переменную (variable: which_keyword) именно какой ключевик был найден (в случае положительного выхода)?


Пробовал сам OR statement добавить, выходит ошибка.
Знаю как сделать через несколько C# блоков (в зенке), но думаю это будет замедлять общий процесс парсинга немного.

Подскажите плз.
Ужу второй день застрял на этом.
Буду очень благодарен ++
 
  • Спасибо
Реакции: Alex.A

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
C#:
string[] regexs = new[]{
    "isn\'t\\ available", "pear", "apple", "работы"
};

string which_keyword = string.Empty;
foreach(string regex in regexs) {
    HtmlElement ui = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("span", "innerhtml", regex, "regexp", 0);
    if (ui.IsVoid) continue;
    else {
        which_keyword = regex;
        break;
    }
}

if(string.IsNullOrEmpty(which_keyword)) throw new Exception("not found, page not loaded"); // Не нашли

return which_keyword; // Нашли
Или можно вынести проверку в функцию - пример:
C#:
// Входящие данные
string[] regexs = new[]{
    "isn\'t\\ available", "pear", "apple", "работы"
};

// Функция проверки
Func<string, bool> Check = delegate(string regex) {
    HtmlElement ui = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("span", "innerhtml", regex, "regexp", 0);
    if (ui.IsVoid) return false;
    return true;
};

string which_keyword = string.Empty; // Сюда сохраним если что-то найдем

// Проверяем на все параметры, останавливаемся если хотя бы 1 нашли
foreach(string regex in regexs) {
    if(Check(regex)) {
        which_keyword = regex;
        break;
    }
}

// Выходим по красной ветке, если ничего не нашли
if(string.IsNullOrEmpty(which_keyword)) throw new Exception("not found, page not loaded"); // Не нашли

// Возвращаем найденный параметр
return which_keyword; // Нашли
 
Последнее редактирование:
  • Спасибо
Реакции: phelix и Astraport

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 261
Благодарностей
679
Баллы
113
Есть такой код:
-------------------------------------------------

HtmlElement ui = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("span", "innerhtml", "isn\'t\\ available", "regexp", 0);
if (ui.IsVoid) throw new Exception("not found, page not loaded");


-------------------------------------------------


Этот код определяет текст "isn't available" на странице HTML, в случае его отсутствие отвечает отрицательно, позволяя зенки продолжать по логике.

Проблема:

1) Есть другие варианты текста которых надо чекать:


К примеру:

Positive (keywords):
- pear
- apple
- banana
- isn't available

Как сделать чтоб в ОДНОМ С# скрипте они все чекались?
Т.е. можно ли добавить здесь OR statement?


2.
Как сделать так чтоб при нахождениях определённого keyword (ex. pear, apple, etc) C# по выходу отмечал в какую-то переменную (variable: which_keyword) именно какой ключевик был найден (в случае положительного выхода)?


Пробовал сам OR statement добавить, выходит ошибка.
Знаю как сделать через несколько C# блоков (в зенке), но думаю это будет замедлять общий процесс парсинга немного.

Подскажите плз.
Ужу второй день застрял на этом.
Буду очень благодарен ++

По поводу первого могу предположить что достаточно сделать массив в который будут занесены слова наличие которых надо проверить и следовательно с ним (массивом) сверяться. Ну это если я правильно понял вопрос.

А второй вопрос вообще не понял, могу предположить что тебе достаточно сделать в папке с проектом эксель файл в который будет записываться тот самый ключевик который был найден
 

phelix

Пользователь
Регистрация
28.04.2021
Сообщения
62
Благодарностей
13
Баллы
8
C#:
string[] regexs = new[]{
    "isn\'t\\ available", "pear", "apple", "работы"
};

string which_keyword = string.Empty;
foreach(string regex in regexs) {
    HtmlElement ui = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("span", "innerhtml", regex, "regexp", 0);
    if (ui.IsVoid) continue;
    else {
        which_keyword = regex;
        break;
    }
}

if(string.IsNullOrEmpty(which_keyword)) throw new Exception("not found, page not loaded"); // Не нашли

return which_keyword; // Нашли
Или можно вынести проверку в функцию - пример:
C#:
// Входящие данные
string[] regexs = new[]{
    "isn\'t\\ available", "pear", "apple", "работы"
};

// Функция проверки
Func<string, bool> Check = delegate(string regex) {
    HtmlElement ui = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("span", "innerhtml", regex, "regexp", 0);
    if (ui.IsVoid) return false;
    return true;
};

string which_keyword = string.Empty; // Сюда сохраним если что-то найдем

// Проверяем на все параметры, останавливаемся если хотя бы 1 нашли
foreach(string regex in regexs) {
    if(Check(regex)) {
        which_keyword = regex;
        break;
    }
}

// Выходим по красной ветке, если ничего не нашли
if(string.IsNullOrEmpty(which_keyword)) throw new Exception("not found, page not loaded"); // Не нашли

// Возвращаем найденный параметр
return which_keyword; // Нашли
Спасибо.
Это точно что мне нужно было ++

В signature у тебя написано "Спасибо или 10$ - тебе решать!",
скинь бтк адрес в лс )
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
Спасибо.
Это точно что мне нужно было ++

В signature у тебя написано "Спасибо или 10$ - тебе решать!",
скинь бтк адрес в лс )
Рад помочь.
Оплата не требуется - на форуме здесь дружное сообщество, каждый друг-другу старается помогать кто чем может :-)
Хорошего дня!
 
  • Спасибо
Реакции: phelix

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