Как мне проверить наличие элемента на странице?

#c# #html #browser

#c# #HTML #браузер

Вопрос:

Я пытаюсь щелкнуть ссылку, используя эту строку:

 webBrowser1.Document.GetElementsByTagName("a")[i].InvokeMember("click");
  

Но когда элемент отсутствует на странице, он выдает ошибку Value of '0' is not valid for 'index' .

Я попытался сначала проверить наличие элемента:

 if (webBrowser1.Document.GetElementsByTagName("a") != null) {...}
  

Но, похоже, это не работает.

Как мне проверить, присутствует ли элемент?

Комментарии:

1. Это ошибка компиляции или ошибка времени выполнения (исключение)?

2. что делает эта webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(download_handler); строка?

3. строка, о которой вы спрашиваете, удаляет обработчик после завершения работы. Таким образом, обработчик не будет добавляться несколько раз, заставляя программу делать одно и то же несколько раз.

Ответ №1:

По-видимому webBrowser1.Document.GetElementsByTagName("a") , выдает пустую коллекцию.

Ваш второй пример теста для null , но это что-то другое.

Используйте отладчик, чтобы увидеть webBrowser1.Document.GetElementsByTagName("a").Count

Ответ №2:

почему бы не использовать …

 foreach (HtmlElement elem in elemColl) { }
  

и это означает, что строка -= удаляет обработчик событий

Комментарии:

1. GetElelemtsByTageName возвращает коллекцию HtmlElements, которая является Ienumerable, поэтому вместо использования цикла вы можете также использовать for each . итак, foreach (HTMLElement ele в webBrowser1.Document. getElementsByTagName(«a»))

Ответ №3:

Вы уверены, что в коллекции есть какие-либо элементы?

Когда вы вызываете

 webBrowser1.Document.GetElementsByTagName("a") 
  

вы получаете обратно коллекцию — в ней может быть 1, 2, 100 или… в нем 0 элементов. Коллекция может быть пустой. Вы могли бы позвонить.Посчитайте() на нем и посмотрите.