Xpath

  • Автор темы Dronhik
  • Дата начала
D

Dronhik

Guest
Уже было много тем на эту тему, но чтобы у кого-то возникала такая ошибка не нашел.
Пытаюсь с помощью Xpath найти информацию на странице вот этой командой(путь Xpath правильный, проверил через плагин в браузере):
C#:
instance.ActiveTab.FindElementByXPath("//h1[@id='обработка-xpath']");
Возникает ошибка при компиляции
Ошибка:
Компиляция кода Ошибка в действии "CS1501" "Ни одна из перегрузок метода "FindElementByXPath" не принимает "1" аргументов". [Строка: 2; Cтолбец: 1]
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
C#:
instance.ActiveTab.FindElementByXPath("//h1[@id='обработка-xpath']", 0); // порядковый номер добавь
 

Valandersi

Client
Регистрация
19.01.2015
Сообщения
1 923
Благодарностей
1 123
Баллы
113
Уже было много тем на эту тему, но чтобы у кого-то возникала такая ошибка не нашел.
Пытаюсь с помощью Xpath найти информацию на странице вот этой командой(путь Xpath правильный, проверил через плагин в браузере):
C#:
instance.ActiveTab.FindElementByXPath("//h1[@id='обработка-xpath']");
Возникает ошибка при компиляции
Ошибка:
Компиляция кода Ошибка в действии "CS1501" "Ни одна из перегрузок метода "FindElementByXPath" не принимает "1" аргументов". [Строка: 2; Cтолбец: 1]
Если ищите коллекцию элементов, FindElementsByXPath. Если 1, то нужно указывать номер как в примере выше
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Ошибка:
Компиляция кода Ошибка в действии "CS1501" "Ни одна из перегрузок метода "FindElementByXPath" не принимает "1" аргументов". [Строка: 2; Cтолбец: 1]
Если такая ошибка, значит, что не хватает или лишние параметры/аргументы указанные в скобках. Если подведете мышку к названию используемого метода, то получите всплывающую подсказку с количеством возможных параметров/аргументов и их вариантами(если их несколько), и в каком порядке их надо указывать.
 
D

Dronhik

Guest
Если ищите коллекцию элементов, FindElementsByXPath. Если 1, то нужно указывать номер как в примере выше
C#:
instance.ActiveTab.FindElementByXPath("//h1[@id='обработка-xpath']", 0); // порядковый номер добавь
Если такая ошибка, значит, что не хватает или лишние параметры/аргументы указанные в скобках. Если подведете мышку к названию используемого метода, то получите всплывающую подсказку с количеством возможных параметров/аргументов и их вариантами(если их несколько), и в каком порядке их надо указывать.
Почему тогда если искать в Хроме через плагин xPather, про него тут статья была на зенке, обучающая, находит именно тот элемент который мне нужен и без ошибок?
Тренируюсь просто на вики странице зенки этой: https://zennolab.com/wiki/ru:xpath
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Почему тогда если искать в Хроме через плагин xPather, про него тут статья была на зенке, обучающая, находит именно тот элемент который мне нужен и без ошибок?
Прочитайте еще раз мой ответ. Ошибка не в пути, а в количестве параметров метода. Не хватает индекса элемента. т.е. с одним параметром/аргументом всегда будет ошибка, так как всегда надо передавать два параметра (или сколько указано в подсказке к используемому методу), если поменяете параметры местами, то тоже будет ошибка. В этом ответе уже написали готовый ответ, а если нужно найти не один элемент, а несколько то ответили тут
 
D

Dronhik

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

а подскажите как сохранить результат в переменную, потому что при сохранении просто выводится: FindElementByXPath
C#:
Переменная проекта = Convert.ToString( instance.ActiveTab.FindElementByXPath("//h1[@id='обработка-xpath']"));
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
C#:
Переменная проекта = instance.ActiveTab.FindElementByXPath("//h1[@id='обработка-xpath']",0).InnerText;
 
  • Спасибо
Реакции: Dronhik

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
.GetAttribute("href") такой командой можно получить любой атрибут элемента, как пример стоит href
 
  • Спасибо
Реакции: Dronhik
D

Dronhik

Guest
.GetAttribute("href") такой командой можно получить любой атрибут элемента, как пример стоит href
Можете скинуть ссылку где в документации по зенке описаны эти методы?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
  • Спасибо
Реакции: Dronhik
D

Dronhik

Guest
А можно ли получить списком значения
То есть прописываем путь к div в нем лежат другие div(списком, один за другим) у которых есть data-popup-nm-id="какое-то значение", какой командой можно вытащить все значения data-popup-nm-id этих див. А то этой командой только первое получается вытаскивать
C#:
Переменная проекта = = instance.ActiveTab.FindElementByXPath("//div[@class='xpath']/div", 0).GetAttribute("data-popup-nm-id");
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
C#:
var list = project.Lists["List_1"];
var el_col=instance.ActiveTab.FindElementsByXPath(xpath);
int max_el = el_col.Count;
if ( max_el>0 ){
  for ( int i = 0; i<max_el  ; i++){
    var el=el_col.Elements[i];
    string data = el.GetAttribute("data-popup-nm-id");
    list.Add(data);
  }
}
 
D

Dronhik

Guest
C#:
var list = project.Lists["List_1"];
var el_col=instance.ActiveTab.FindElementsByXPath(xpath);
int max_el = el_col.Count;
if ( max_el>0 ){
  for ( int i = 0; i<max_el  ; i++){
    var el=el_col.Elements[i];
    string data = el.GetAttribute("data-popup-nm-id");
    list.Add(data);
  }
}
А почему мы вынуждены перебирать в цикле все эти значения. Разве не существует какого-то метода Xpath. Есть же функции для получения первого элемента, последнего, предпоследнего
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
А почему мы вынуждены перебирать в цикле все эти значения. Разве не существует какого-то метода Xpath. Есть же функции для получения первого элемента, последнего, предпоследнего
перебор для получения всех элементов, как вы хотели. если нужен какой то определенный, то получить элемент из коллекции вот так var el=el_col.Elements[ номер в коллекции ];
 
D

Dronhik

Guest
перебор для получения всех элементов, как вы хотели. если нужен какой то определенный, то получить элемент из коллекции вот так var el=el_col.Elements[ номер в коллекции ];
Выдает ошибку

Компиляция кода Ошибка в действии "CS1501" "Ни одна из перегрузок метода "FindElementsByXPath" не принимает "2" аргументов". [Строка: 4; Cтолбец: 12]
 
Последнее редактирование модератором:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Выдает ошибку

Компиляция кода Ошибка в действии "CS1501" "Ни одна из перегрузок метода "FindElementsByXPath" не принимает "2" аргументов". [Строка: 4; Cтолбец: 12]
код то какой ? FindElementsByXPath только 1 аргумент принимает
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113

TwistDanceR

Client
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Выдает ошибку
Компиляция кода Ошибка в действии "CS1501" "Ни одна из перегрузок метода "FindElementsByXPath" не принимает "2" аргументов". [Строка: 4; Cтолбец: 12]
Тебе бы прочитать, что такое перегрузка метода. Коротко но ясно: перегрузка это когда есть два метода обработки данных у которых одинаковое имя, но разное исполнение. Например, когда в методе можно разные типы данных обрабатывать. Это сообщение значит, что у метода FindElement - два параметра : Xpath, и номер совпадения, а у FindElements - Один - он находит ВСЕ совпадения, а не какое-то одно. У тебя даже всплывающая подсказка по перегрузкам и описание данных которые они принимают в C#-код-кубике есть, нужно только глаза открыть и стрелочку вверх-вниз понажимать.
Подробнее в статье про коллекции и парсинг, сильно не углубляйся, особенно в лямбды. Про коллекции - доступно. https://zennolab.com/discussion/threads/rabota-s-kollekcijami-parsing-donory-registracii.59799/

По поводу твоего вопроса - можно ли без цикла? Можно, только ты будешь обращаться к каждому элементу или его параметру отдельно. Оно тебе надо? - Оно тебе нафиг не надо.
 

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