2015-09-04 2 views
0

У меня есть этот блок кодаC# Получение атрибута HTML-элемента

<button value="1" class="_42ft _4jy0 _n6m _4jy3 _517h _51sy" data-hover="tooltip" aria-label="Start a video call with Tsiato" type="submit" id="js_rk"><i class="_e0b img sp_qk8sNUxukfD sx_4816f8"></i></button> 

И я пытаюсь получить доступ, что «ария-метка», чтобы увидеть, если он содержит слово «Пуск» ...

используя этот код

try 
{ 
    HtmlElementCollection buttons = pinger.Document.GetElementsByTagName("button"); 
    foreach (HtmlElement curElement in buttons) 
    { 
     if (curElement.GetAttribute("classname").ToString() == "_42ft _4jy0 _n6m _4jy3 _517h _51sy") 
     { 
      if (curElement.GetAttribute("aria-label").ToString().Contains("Start a video call")) 
      { 
       label5.Text = "online"; 
      } 
     } 
    } 
} catch (NullReferenceException b) 
{ 
    Console.WriteLine(b.ToString()); 
} 

я могу найти класс, но я не могу получить атрибут «ария-метка», чтобы увидеть, если он содержит какие-либо «Пуск» текст ... можете ли вы сказать мне, что Неправильно здесь? : \

+0

какая ошибка вы получаете? –

+0

Nullreferenceexception –

+0

Если он где-то использует объект DOM, может потребоваться использовать 'ariaLabel'? Просто догадка. – Alex

ответ

0

Так что если есть кнопка, которая не содержит арию-метку в качестве атрибута, вы получите исключение nullreference, потому что вы используете метод Contains() на null.

Так попробуйте это:

 String ariaLabel = curElement.GetAttribute("aria-label"); 
     if (ariaLabel != null && ariaLabel.Length != 0) 
     { 
      if(ariaLabel.Contains("Start a video call")) 
      { 
       // do your stuff 
      } 
     } 
0

Вы могли бы попробовать это -

var p = "<button value='1' class='_42ft _4jy0 _n6m _4jy3 _517h _51sy' data-hover='tooltip' aria-label='Start a video call with Tsiato' type='submit' id='js_rk'><i class='_e0b img sp_qk8sNUxukfD sx_4816f8'></i></button>"; 
var k = new XmlDocument(); 
k.Load(new MemoryStream(Encoding.UTF8.GetBytes(p.ToCharArray()))); 
Console.WriteLine(k.GetElementsByTagName("button")[0].Attributes["aria-label"].Value); 
0
  1. Ваш класс = атрибут имеет имя "класс", а не "имя класса".
  2. Если ваш метод GetAttribute (string) может возвращать значение null, вы всегда должны проверять возвращаемое значение.

    if (curElement.GetAttribute("classname") == "_42ft _4jy0 _n6m _4jy3 _517h _51sy" 
    && (curElement.GetAttribute("aria-label") ?? "").Contains("Start a video call")) 
    { 
        label5.Text = "online"; 
    } 
    
Смежные вопросы