Подтвердить что ты не робот

HTMLAgilityPack SelectNodes для выбора всех элементов <img>

Я делаю проект на С#, который в основном скребок для экрана изображения для игры, связанной с поиском изображений. Я пытаюсь использовать HTMLAgilityPack, чтобы выбрать все элементы изображения и поместить их в HTMLNodeCollection, например:

//set up for checking autos

HtmlNodeCollection imgs = new HtmlNodeCollection(doc.DocumentNode.ParentNode);
imgs = doc.DocumentNode.SelectNodes("//img");

foreach (HtmlNode img in imgs)
{
    HtmlAttribute src = img.Attributes["@src"];
    urls.Add(src.Value);
}

Обратите внимание, что URL-адреса являются публичной коллекцией списков:

public List<string> urls = new List<string>();

Мой цикл foreach генерирует исключение:

Ссылка на объект не установлена ​​в экземпляр объекта.

Проверяя авто, достаточно, imgs имеет значение null. Есть ли лучший способ отслеживать источник этой проблемы? Я понятия не имею, если это мой Xpath или что.

Самая неприятная часть - это то, что я уже получил ее на работу, но перепутал свои версии файлов и потерял работу. Derp.

4b9b3361

Ответ 1

У вас может быть опечатка в следующей строке:

HtmlAttribute src = img.Attributes["@src"];

Я получил это, чтобы работать для меня (обратите внимание на @позицию):

HtmlAttribute src = img.Attributes[@"src"];

Ответ 2

Это работает для меня. Я думаю, что ваш документ загружен неправильно, поэтому xpath не возвращает совпадений.

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml("<html><head></head><body><div><img /><div><img /><img/></div></div><img/></body></html>");

var nodes = htmlDocument.DocumentNode.SelectNodes("//img");
// 4 nodes found
foreach (var node in nodes)
{
    // do stuff
}