Я пытаюсь получить значения с веб-сайта. Значения находятся внутри div, где больше div под этим «основным div» (если я могу назвать это так). Я хочу, чтобы получить эти значения divs внутри «главного div». Я пробовал с этим кодом:
string url = "www.examplesite.com";
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load(url);
HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//div[@id='plex_container']");
foreach (HtmlNode node in collection)
{
string cptitle = node.SelectSingleNode(".//div[@id='pltexts']").InnerText;
listBox1.Items.Add(cptitle);
}
Структура веб-сайта (во время работы F12) выглядит следующим образом:
<body onload="initialize()" id="dashboard">
<div id="header">...</div>
<div id="dashboard_container">
<div id="comm" class="comm_expanded">
<div id="pl_header_tab">...</div>
<div id="pltext_tab">...</div>
<div id="plex_container">
<div id="pl_status"></div>
<div id="pltexts">
<div class="plext">...</div> // <-- Im trying to get these values
<div class="plext">...</div> // <--
<div class="plext">...</div> // <--
<div class="plext">...</div> // <--
<div class="plext">...</div> // <--
Я получаю ошибку «Ссылка на объект, не установленную на экземпляр объекта» для foreach ...
Используя предоставленный фрагмент HTML, вы можете использовать селектор XPath для непосредственного доступа к текстовым узлам:
var html =
@"
<body onload='initialize()' id='dashboard'>
<div id='header'>...</div>
<div id='dashboard_container'>
<div id='comm' class='comm_expanded'>
<div id='pl_header_tab'>...</div>
<div id='pltext_tab'>...</div>
<div id='plex_container'>
<div id='pl_status'></div>
<div id='pltexts'>
<div class='plext'>00</div>
<div class='plext'>01</div>
<div class='plext'>02</div>
<div class='plext'>03</div>
<div class='plext'>04</div>
</div>
</div>
</div>
</div>
</body>";
var document = new HtmlDocument();
document.LoadHtml(html);
var textNodes = document.DocumentNode.SelectNodes(
"//div[@id='pltexts']/div[@class='plext']/text()"
);
if (textNodes != null)
{
foreach (var t in textNodes) Console.WriteLine(t.InnerText);
}
Вывод:
00
01
02
03
04