Как работать с HtmlElementCollection (Click, Remove)?

dian4ik25

Client
Регистрация
17.03.2016
Сообщения
18
Благодарностей
2
Баллы
3
Помогите пожалуйста обработать элементы страницы.

Есть много таблиц вида:
Код:
<table id="table19">
            <thead>
                <tr>
                    <th>
                        <button type="button" id="button-19">Кнопка 1</button>
                        <span class="title">SearchText</span>
                        <span class="sub-title">Описание SearchText</span>
                    </th>
                </tr>
            </thead>

            <tbody>…<tbody>
</table>
Нужна только та, у которой:
  • в span.title inntertext - значение SearchText
  • в table#id - значение "table" + 19
Задачи:
  • Удалить все table, у которых id не 19
  • Выполнить Click на THEAD нужной
Так не работает:
Код:
// получаем значения
var search_text = project.Variables["search_text "].Value;

// вспомогательные переменные
List<string> listRows = new List<string>();
var active_id = "";

// XPATH
// get document
Document doc = instance.MainTab.MainDocument;
// отбираем все THEAD
HtmlElementCollection heCol = doc.FindElementsByXPath(@"//div[@id='container']/table/thead/tr");
HtmlElement[] he = heCol.Elements;
//вытаскиваем outerhtml из каждого элемента
var data = heCol.AttributesToString("outerhtml");


// REGEX
// Парсим содержимое <th> всех таблиц и помещаем в список
var regexRow = new Regex( @"(?<=<th[^<>]*?>)[\w\W]*?(?=</th>)" );
regexRow.Matches(data).Cast<Match>().ToList().ForEach(m=>listRows.Add(m.Value));

// Ищем нужный <th> на странице
for(int i=0; i < listRows.Count; i++) {
   
    // читаем строку из списка
    var str = listRows[i];
   
    // проверяем содержание текста в строке, если есть совпадение - кликаем по thead
    if (str.Contains(@"<span class=""title"">" + search_text + "</span>")) {
       
        active_id = Regex.Match( str, @"(?<=id=""button-).*?(?="">)" ).Value;
       
        // ======================
        // вот тут проблема - нужно подняться наверх до thead и кликнуть по нему
        // ======================
        he[i].Click();
       
        break;

    }
}


// отбираем все TABLE
HtmlElementCollection heColTable = doc.FindElementsByXPath(@"//div[@id='container']/table[not(@id='table" + active_id + "')]");

listRows.Clear();

var data_table = heColTable.AttributesToString("outerhtml");

// REGEX
// Парсим все таблицы и помещаем в список
var regexTable = new Regex( @"[\w\W]*?" );
regexTable.Matches(data_table).Cast<Match>().ToList().ForEach(m=>listRows.Add(m.Value));

// Ищем нужную таблицу на странице
for(int i=0; i < listRows.Count; i++) {

    // ======================
    // тут тоже проблема - нужно удалить все лишние TABLE
    // ======================
    heColTable.Remove(i);
}
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 279
Благодарностей
5 857
Баллы
113

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