Richard Deeming
Строка, которую вы передаете в метод GetAttribute[^] метод - это имя атрибута, который вы хотите получить.
Вы проходите в ценность атрибута, называемого class
- Это не сработает. Такого атрибута нет и никогда не может быть, потому что имена атрибутов не могут содержать пробелов.
Вы мог измените свой тест на:
if (link.GetAttribute("class") == "ipsNotificationCount ipsHide")
{
...
}
Но это было бы неэффективно и, скорее всего, сломалось бы, если бы порядок имен классов изменился или к элементу был добавлен другой класс.
Вместо этого используйте
GetElementsByClassName[
^] метод поиска элемента (ов) с указанным классом:
var links = GeckoWB.Document.GetElementsByClassName("ipsNotificationCount");
foreach (var link in links)
{
string value = link.GetAttribute("data-currentcount");
if (!string.IsNullOrWhiteSpace(value))
{
int currentCount;
if (int.TryParse(value, out currentCount))
{
...
}
}
}
xXxRevolutionxXx
Одно исправление к вашему коду. "Var link "в цикле foreach должен быть типом: GeckoHtmlElement или иначе... используя тип данных var, он становится типом GeckoNode и не включает метод" GetAttribute". Теперь проблема с вашим кодом заключается в том, что он возвращает мне ошибку "ССЫЛКА на объект не установлена на экземпляр объекта"... потому что переменная 'links' имеет значение null и не содержит никаких "элементов". Вот мой код:
http://prntscr.com/e8oo33
Это ошибка "аварии": http://prntscr.com/e8oq15
P. S Я использую метод invoker thing, потому что Gecko Browser находится в другом потоке.
Richard Deeming
Это даже отдаленно не удивительно. То BeginInvoke
метод возвращает немедленно Код, который следует за ним, будет выполнен до делегат, к которому вы перешли BeginInvoke
.
Переместите весь код метода внутрь BeginInvoke
делегировать или заставить весь метод работать в потоке пользовательского интерфейса:
private void CountMsgAndNot()
{
if (InvokeRequired)
{
BeginInvoke((Action)CountMsgAndNot);
return;
}
var links = GeckoWB.Document.GetElementsByClassName("ipsNotificationCount");
foreach (GeckoHtmlElement link in links)
{
string value = link.GetAttribute("data-currentcount");
if (!string.IsNullOrWhiteSpace(value))
{
MsgLbl.Text = value;
break;
}
}
}