Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Заблокирован
1

Длительное ожидание элемента с нужным значением

15.04.2017, 22:38. Показов 1666. Ответов 2

Author24 — интернет-сервис помощи студентам
Привет, мужики.
Пишу программу на Visual Studio С# + selenium (отличное сочетание).
Знания С# и selenium низкие. Поэтому появились затруднения и прошу помощи.

Изначально такой текст html:
HTML5
1
2
3
4
5
6
7
<li class="c-events__item c-events__item_col">
<a href="https://.....com" class="c-events__name"></a>
<div class="c-events__dop">
<div title="1 element" class="c-events__score">
<span class="c-events__fullScore">1 element</span> 
</div>
</li>
Через 5 минут, а может и через 5 часов, становится таким:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<li class="c-events__item c-events__item_col">
<a href="https://.....com" class="c-events__name">1 element</a>
<div class="c-events__dop">
<div title="1 element" class="c-events__score">
<span class="c-events__fullScore">1 element</span> 
</div>
</li>
<li class="c-events__item c-events__item_col">
<a href="https://.....com" class="c-events__name">2 element</a>
<div class="c-events__dop">
<div title="2 element" class="c-events__score">
<span class="c-events__fullScore">2 element</span> 
</div>
</li>
Мне нужно чтобы программа сидела на сайте 5 минут или 5 часов и ждала когда появится: div.c-events__score именно с тайтлом "2 element". И когда элемент появится, то должна вернуться ссылка только появившегося элемента.

Как это реализовать? Бесконечный цикл и каждый раз дергать код сайта - глупая идея. Есть же варианты разумнее.
Заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2017, 22:38
Ответы с готовыми решениями:

Средства синхронизации потоков. Длительное ожидание
Здравствуйте. Сперва опишу абстрактную суть задачи: есть сервис который работает с объектами...

Указать номер элемента со значением x или установить, что элемент с таким значением отсутствует
Здравствуйте, помогите пожалуйста найти ошибку) Задание:Требуется указать номер элемента со...

Вставить в массив элемент перед первым элементом с максимальным значением и после первого элемента минимальным значением
Кто разбирается в С#? Можете написать код Вставить в массив элемент с заданным значением перед...

Как сравнить DateTime с нужным значением?
Мне необходимо написать условие: сумма трех datetime = 0 Но суммирование даты мне не даст ни 0,...

2
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,342
Записей в блоге: 1
16.04.2017, 00:28 2
Nina78, только постоянный опрос сайта - по другому никак.
1
Заблокирован
16.04.2017, 17:57  [ТС] 3
Лучший ответ Сообщение было отмечено Nina78 как решение

Решение

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Nina78, только постоянный опрос сайта - по другому никак.
Я это понимаю.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
public bool isElementPresent(By by)
        {
            try
            {
                Browser.FindElement(by);
                return true;
            }
            catch (NoSuchElementException e)
            {
                return false;
            }
        }
 
            bool stopserach = false;
            List<IWebElement> AllGLi;
            List<IWebElement> AllGSc;
            do
              {
                  if (isElementPresent(By.CssSelector("a.c-events__name")) == true && isElementPresent(By.CssSelector(".c-events__score")) == true)
                  {
                      AllGLi = Browser.FindElements(By.CssSelector("a.c-events__name")).ToList();
                      AllGSc = Browser.FindElements(By.CssSelector(".c-events__score")).ToList();
                      for (int i = 0; i < AllGLi.Count; i++)
                      {
                          String securegame = AllGSc[i].GetAttribute("title");
                          if (securegame.ToString() == "Текст который должен появиться на странице")
                          {
                              listboxlog.Items.Add( AllGLi[i].GetAttribute("href") + ' ' + AllGSc[i].GetAttribute("title"));
                              stopserach = true;
                          }
                      }
                  }
              } while (stopserach != true);
Почему этот код долго выводит в listbox ссылку и тайтл даже если эти элементы уже есть на странице? И еще программа подвисает и кнопки не жмакаются до того момента, когда программа не выведет в listbox текст.

Добавлено через 17 часов 18 минут
Вопросы решились. Запускаем текст в другой поток(Thread,Task) или backgroundworker, в потоке делаем цикл, а в цикле вытягивает с сайта нужные элементы. Thread - типа устаревший метод, но есть ф-ции которых нет в других потах. Task - типа новый, но обладает большим минусом - нельзя перезапускать потоки. backgroundworker - наверное лучше всего, перезапустить даже можно.
0
16.04.2017, 17:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2017, 17:57
Помогаю со студенческими работами здесь

Как прописать пол байта нужным значением?
Всем привет! Есть, к примеру в байте значение 0х12, а нужно, что б было 0хА2 или 0х1А. Как более...

Заменить указанную подстроку нужным числовым значением
Составить и отладить программу, заменяющую во введенном строковом выражении указанную подстроку...

Как найти в массиве объектов элементы с нужным значением поля?
for (i = 0; i &lt; linksData.length; ++i) { alert(&quot;source: &quot; + linksData.source + &quot; target: &quot;...

Заменить во введенном строковом выражении указанную подстроку нужным числовым значением
Cоставить программу, заменяющую во введенном строковом выражении указанную подстроку нужным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru