Как определить нужный элемент

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8
Всем добрый день, подскажите, пожалуйста.

Есть сайт, spywords.ru. Служит для того, чтобы проверить активность конкурентов в части контекстной рекламы.

Хочу вытащить данные оттуда по затратам, но дело в том, что все ячейки с данными имеют один и тот же тэг td
upload_2019-8-9_16-54-26.png


В свойствах же элемента данный каждые раз новые.
upload_2019-8-9_16-54-57.png


Не знаю к чему прицепиться, чтобы данные тащить. Как можно решить задачу?
 

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 223
Баллы
113
Попробуйте при помощи xPath зацепиться за какой-то уникальный родительский элемент. Например, за логотип яндекса.
 
  • Спасибо
Реакции: doc

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 544
Баллы
113

Вложения

  • Спасибо
Реакции: Nike59 и Sergodjan

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8
Спасибо. Попробую. Но сначала узнаю, что это такое)
 

kibborg

Client
Регистрация
17.04.2019
Сообщения
7
Благодарностей
0
Баллы
1
Можно по номеру ячейки td получать значение, а потом увеличивать на необходимое значение ячеек,чтобы получить значение из следующего ряда.
 

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8
Пробовал, но каждый раз номера ячеек разные. Поэтому такой способ не подходит. Изучаю xpath
 

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
14 328
Благодарностей
5 431
Баллы
113
Пробовал, но каждый раз номера ячеек разные. Поэтому такой способ не подходит. Изучаю xpath
Цепляйся за размер ячейки.


Как вариант работать уже с самим кодом и регулярками брать нужное значение.
 

kibborg

Client
Регистрация
17.04.2019
Сообщения
7
Благодарностей
0
Баллы
1

Вложения

orka13

Client
Регистрация
07.05.2015
Сообщения
2 166
Благодарностей
2 167
Баллы
113
Муторно, но по феншую. я так делаю, когда не знаю сколько ячеек в таблице, то есть заголовки могут "прыгать":
C#:
// собираем в коллекцию все ячейки первой строки первой таблице с данными (заголовки):
HtmlElementCollection Stroka_Zagolovka = instance.ActiveTab.FindElementsByXPath(@"(//table[contains(@class, 'data_table')])[1]//tr[1]/td");
int Nomer_Stolbca = 0;

//перебираем в цикле все ячейки заголовков пока не найдем нужный нам по содержанию:
for (int i = 0; i < Stroka_Zagolovka.Count; i++) {
    string Text_Yacheyki = Stroka_Zagolovka.GetByNumber(i).InnerText.Trim();
    project.SendInfoToLog(Text_Yacheyki, false); // в лог выводим текст ячеек из перебора
    // если находим ячейку с нужным нам заголовком (там кстати два пробела) то запоминаем номер ее столбца и останавливаем цикл
    if (Text_Yacheyki == "Бюджет  на контекст") {
        Nomer_Stolbca = i;
        break;
    }
}

// меняем в XPath строчку на следующую после заголовков (там в цикле можно все строки обойти если их много), и в ней берем текст ячейки под нашим номером:
HtmlElement Byudzhet_na_kontekst = instance.ActiveTab.FindElementByXPath(@"(//table[contains(@class, 'data_table')])[1]//tr[2]/td", Nomer_Stolbca);
//return Nomer_Stolbca;
return Byudzhet_na_kontekst.InnerText.Trim();
 
  • Спасибо
Реакции: Mikhail B.

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8
Муторно, но по феншую. я так делаю, когда не знаю сколько ячеек в таблице, то есть заголовки могут "прыгать":
C#:
// собираем в коллекцию все ячейки первой строки первой таблице с данными (заголовки):
HtmlElementCollection Stroka_Zagolovka = instance.ActiveTab.FindElementsByXPath(@"(//table[contains(@class, 'data_table')])[1]//tr[1]/td");
int Nomer_Stolbca = 0;

//перебираем в цикле все ячейки заголовков пока не найдем нужный нам по содержанию:
for (int i = 0; i < Stroka_Zagolovka.Count; i++) {
    string Text_Yacheyki = Stroka_Zagolovka.GetByNumber(i).InnerText.Trim();
    project.SendInfoToLog(Text_Yacheyki, false); // в лог выводим текст ячеек из перебора
    // если находим ячейку с нужным нам заголовком (там кстати два пробела) то запоминаем номер ее столбца и останавливаем цикл
    if (Text_Yacheyki == "Бюджет  на контекст") {
        Nomer_Stolbca = i;
        break;
    }
}

// меняем в XPath строчку на следующую после заголовков (там в цикле можно все строки обойти если их много), и в ней берем текст ячейки под нашим номером:
HtmlElement Byudzhet_na_kontekst = instance.ActiveTab.FindElementByXPath(@"(//table[contains(@class, 'data_table')])[1]//tr[2]/td", Nomer_Stolbca);
//return Nomer_Stolbca;
return Byudzhet_na_kontekst.InnerText.Trim();

с программированием беда у меня
 

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8
Подскажите, составил xpath запрос. Его через купик "парсинг XML" применять?
Если не сложно, можно пример привести?
 

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8
Или может вытаскивать DOM модель и из неё уже парсить? Если да, то через что DOM модель можно вытащить. Уроки не все успел посмотреть, а задачу решать надо
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 544
Баллы
113

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8
Получаю Xpath запрос
/html/body/div[@class='header_bg']/div[@class='wrapper']/div[@class='header']/div[@class='content tables']/div[@class='content_middle for_tables']/div[@id='sd_tabs']/div[@id='svodka']/table[@class='data_table stat']/tbody/tr[@class='white']/td[5]

Через консоль разработчика проверяю, все находит.

А в какой кубик его вставить? Проверяю через расширенный редактор, не находит ничего
 

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