#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 элементов. Коллекция может быть пустой. Вы могли бы позвонить.Посчитайте() на нем и посмотрите.