C# Проход по списку элементов

zlodey

Client
Регистрация
24.04.2011
Сообщения
132
Благодарностей
9
Баллы
18
Привет, столкнулся с проблемой на странице выдачи duckduckgo.com получение списка элементов и поиск нужной переменной:
переменная domain содержит домен вида domain.com

Подскажите где ошибка?

C#:
Tab tab = instance.ActiveTab;

if (tab.IsBusy) tab.WaitDownloading();

tab.NavigateTimeout = 15;

var rnd = new Random();

HtmlElement he = null;
//Находим коллекцию элементов
HtmlElementCollection liColl = tab.FindElementsByXPath("//span[contains(@class,'domain')]");
//return liColl;
//Проходим в цикле по каждому посту
foreach (HtmlElement liElem in liColl.Elements)

{

HtmlElement span = liElem.FindChildByXPath("//a[contains(@class,'result__a')]", 0);
if(span.InnerText.Contains(project.Variables["domain"].Value)){
  //return liElem.InnerText;
  he = liElem.FindChildByXPath("//span[contains(@class,'domain')]", 0);
  break;
}
}

//if (he.IsVoid) return -1;
//return he.InnerText;
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);

// Задержка эмуляции
instance.WaitFieldEmulationDelay();

//he.ScrollIntoView();

//rand pause
System.Threading.Thread.Sleep(rnd.Next(1500, 2500));

he.Click();
instance.ActiveTab.WaitDownloading();
//rand pause
//System.Threading.Thread.Sleep(rnd.Next(2000, 3000));
 
Последнее редактирование:

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
400
Баллы
63
А вы видите у span-ов, которые вы собираете в коллекцию какие-то дочерние элементы? Я вот не вижу. В том наверное и ошибка

86338


Я бы собирал коллекцию элементов «a»(желтенькие на скрине — именно их вы и пытаетесь найти как дочерний эл-т обведенного красным span) вот по этому xpath //a[contains(@class,'result__a')], проверял бы атрибут href на вхождение нужного домена, и если вхождение имеется, кликал мышью. Это если я правильно понял то что вы делаете
 
Последнее редактирование:
  • Спасибо
Реакции: zlodey

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
400
Баллы
63
Что то вроде этого:

C#:
HtmlElementCollection aCol = instance.ActiveTab.FindElementsByXPath("//a[contains(@class,'result__a')]");
foreach(var a in aCol)
{
    if(a.GetAttribute("href").Contains(project.Variables["domain"].Value))
    {
        //click
       //Только  кликать нужно, чтобы открылась новая вкладка, иначе следующая итерация цикла выдаст ошибку
       //ну или ставить breack после клика
    }
}
 
  • Спасибо
Реакции: zlodey

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)