Взять все эелементы с аттрибутом

[![введите сюда описание изображения][1]][1]У меня есть на сайте кучу div которые имеют аттрибут data-href. Мне нужно взять именно эти div и вытянуть с них значение аттрибута. Как ни пробовал, он не видит их, вот мой код:

var all_web = document.QuerySelectorAll("div[data-href]");
foreach (var el_web in all_web)
            {Console.WriteLine(el_web.GetAttribute("data-href").ToString());}

и через Where

var all_web = document.QuerySelectorAll("div").Where(x=>x.HasAttribute("data-href"));
foreach (var el_web in all_web)
            {Console.WriteLine(el_web.GetAttribute("data-href").ToString());}

div селектор самого сайта:

<div data-href="//aliexpress.ru/item/*******.html.../div>

Я беру html с помощью httpclient, и дальше по стандарту

string allhtml = await client.GetStringAsync("https://aliexpress.ru/......./");
 var config = Configuration.Default.WithDefaultLoader().WithCss(); 
var context = BrowsingContext.New(config); //description item_table-description  
IDocument document = await context.OpenAsync(req => req.Content(allhtml))


  [1]: https://i.stack.imgur.com/3gpQP.png

Ответы (1 шт):

Автор решения: aepot

Проанализировав страницу по вашей ссылке, я не увидел ни одного тега div с требуемым аттрибутом data-href.

Я использовал:

  • HtmlAgilityPack 1.11.23
  • Fizzler.Systems.HtmlAgilityPack 1.2.1

Попробовал выдачу для a[data-href], всё заработало.

public static void Main(string[] args)
{
    HttpClient client = new HttpClient();
    string page = client.GetStringAsync("https://aliexpress.ru/store/<censored>").GetAwaiter().GetResult();
    HtmlDocument html = new HtmlDocument();
    html.LoadHtml(page);
    HtmlNode document = html.DocumentNode;
    IEnumerable<HtmlNode> nodes = document.QuerySelectorAll("a[data-href]");
    foreach (HtmlNode el_web in nodes)
    { 
        Console.WriteLine(el_web.Attributes["data-href"].Value); 
    }
    Console.ReadKey();
}

(Простите, не стал заморачиваться с асинхронностью)

Возможно, вы не видите нужных тегов потому, что их рендерит в обычном браузере JavaScript. Поэтому получить их напрямую не получится. Нужно проанализировать, куда еще браузер шлет запрос, и из какого именно ответа прилетают нужные вам данные. Брать эти правила и пробовать по ним слать запросы на алик и парсить данные, оттуда полученные.

→ Ссылка