Парсинг Xpath на POST/GET с помощью HtmlAgilityPack.dll

Денчик

Client
Регистрация
01.02.2023
Сообщения
7
Благодарностей
0
Баллы
1
Добрый день, Уважаемые Форумчане!
Столкнулся с проблемой, кубик C# выдает ошибку: Выполнение действия CSharp OwnCode: Код 1. [Строка: 12; Cтолбец: 0] Выдано исключение типа "System.Exception".
Тестировал Xpath в Xpath Helper, нужные значения выдает, так что с ней все в порядке. Судя по всему это какой-то конфликт с библиотекой. В коде я имею весьма поверхностные знания, но вместе с ChatGPT мы пришли к такому выводу))
Что в кубике:
Код 1:
string text = project.ExecuteMacro(project.Variables["get"].Value);
var errorIfEmpty = true;
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(text);

var xpathExpression = "//div[@class='collection-card-container']//a[@class='']/@href[starts-with(., '/category-')]";
var targetNode = htmlDocument.DocumentNode.SelectSingleNode(xpathExpression);

if (targetNode == null)
{
    if (errorIfEmpty) throw new Exception();
}
else
{
    project.Variables["container"].Value = targetNode.InnerText.Trim();
}
Рассчитываю на Вашу помощь в решении этого вопроса! :-)
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
  • Спасибо
Реакции: Денчик

Денчик

Client
Регистрация
01.02.2023
Сообщения
7
Благодарностей
0
Баллы
1
Поковырялся я с ParseByXpath(String,String,String) Method, но ни черта у меня не вышло, голова не работает, плох я в коде, а GPT с этой библиотекой не знаком...
Твой путь ведет на атрибут, а не на элемент. Может в этом проблема
но благодаря Вашей подсказке удалось получить от GPT рабочий код )) большое спасибо

Код 1:
string text = project.ExecuteMacro(project.Variables["get"].Value);
var errorIfEmpty = true;
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(text);

var xpathExpression = "//div[@class='collection-card-container']//a[@class=''][starts-with(@href, '/category-')]";
var targetElements = htmlDocument.DocumentNode.Descendants().Where(node => node.Name == "a" && node.Attributes["href"] != null && node.Attributes["href"].Value.StartsWith("/category-"));

if (targetElements == null || !targetElements.Any())
{
    if (errorIfEmpty) throw new Exception();
}
else
{
    project.Lists["collections"].AddRange(targetElements.Select(node => node.Attributes["href"].Value.Trim()));
}
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Поковырялся я с ParseByXpath(String,String,String) Method, но ни черта у меня не вышло, голова не работает, плох я в коде, а GPT с этой библиотекой не знаком...

но благодаря Вашей подсказке удалось получить от GPT рабочий код )) большое спасибо

Код 1:
string text = project.ExecuteMacro(project.Variables["get"].Value);
var errorIfEmpty = true;
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(text);

var xpathExpression = "//div[@class='collection-card-container']//a[@class=''][starts-with(@href, '/category-')]";
var targetElements = htmlDocument.DocumentNode.Descendants().Where(node => node.Name == "a" && node.Attributes["href"] != null && node.Attributes["href"].Value.StartsWith("/category-"));

if (targetElements == null || !targetElements.Any())
{
    if (errorIfEmpty) throw new Exception();
}
else
{
    project.Lists["collections"].AddRange(targetElements.Select(node => node.Attributes["href"].Value.Trim()));
}
интересный код, но путь там никак не задействован)
 

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