- Регистрация
- 09.12.2017
- Сообщения
- 18
- Благодарностей
- 3
- Баллы
- 3
Недавно начал осваивать C#. Еще очень много чего не знаю.
Есть такой код, кликает по списку каналов в telegram, браузер стоит Chrome, версия последняя 7.3.1.1:
Если начать выполнять то получается что он кликает на первый элемент в цикле, а дальше судя по логу идут пустые элементы:
Но если закомментировать строку //element.Click(); и оставить только вывод элементов лог, то в логе получается он берет все элементы по порядку из коллекции.
То есть поидее как и должен работать, но не работает почему-то если вызвать действие Click на элемент.
Нашел подобную тему - https://zennolab.com/discussion/threads/foreach-klik-v-cikle-ne-rabotaet.53054/
И вроде как переписал код с решением которое там предложено:
Но в результате получаю тоже самое + ошибку после нескольких повторений:
А теперь самое интересное, если запустить этот код(с циклом foreach) в firefox, то все работает как надо.
Видимо я что-то упускаю и в chrome надо как-то по другому писать?
Есть такой код, кликает по списку каналов в telegram, браузер стоит Chrome, версия последняя 7.3.1.1:
C#:
Tab tab = instance.ActiveTab;
HtmlElement he = tab.FindElementByTag("body", 0);
string name = "";
string xpath = string.Format(@"//div[@class='im_dialogs_scrollable_wrap nano-content']/descendant::span[contains(text(), '{0}')]/ancestor::a[@class='im_dialog']", name);
var coll = he.FindChildrenByXPath(xpath);
int count = coll.Count;
string countString = Convert.ToString(coll.Count);
project.SendInfoToLog(countString);
project.SendInfoToLog("Берем канал из коллекции");
foreach (HtmlElement element in coll)
{
project.SendInfoToLog(element.TagName);
//element.RiseEvent("click", "full");
element.Click();
Thread.Sleep(1000);
}
Тип Время Сообщение
14:13:24 43
14:13:24 Берем канал из коллекции
14:13:24 a
14:13:25
14:13:26
14:13:27
14:13:28
14:13:29
14:13:30
14:13:31
14:13:32
14:13:33
14:13:34
14:13:24 43
14:13:24 Берем канал из коллекции
14:13:24 a
14:13:25
14:13:26
14:13:27
14:13:28
14:13:29
14:13:30
14:13:31
14:13:32
14:13:33
14:13:34
Но если закомментировать строку //element.Click(); и оставить только вывод элементов лог, то в логе получается он берет все элементы по порядку из коллекции.
Тип Время Сообщение
14:26:56 48
14:26:56 Берем канал из коллекции
14:26:56 a
14:26:57 a
14:26:58 a
14:26:59 a
14:27:00 a
14:27:01 a
14:27:02 a
14:27:03 a
14:27:04 a
14:26:56 48
14:26:56 Берем канал из коллекции
14:26:56 a
14:26:57 a
14:26:58 a
14:26:59 a
14:27:00 a
14:27:01 a
14:27:02 a
14:27:03 a
14:27:04 a
То есть поидее как и должен работать, но не работает почему-то если вызвать действие Click на элемент.
Нашел подобную тему - https://zennolab.com/discussion/threads/foreach-klik-v-cikle-ne-rabotaet.53054/
И вроде как переписал код с решением которое там предложено:
C#:
Tab tab = instance.ActiveTab;
HtmlElement he = tab.FindElementByTag("body", 0);
string name = "";
string xpath = string.Format(@"//div[@class='im_dialogs_scrollable_wrap nano-content']/descendant::span[contains(text(), '{0}')]/ancestor::a[@class='im_dialog']", name);
HtmlElementCollection coll = he.FindChildrenByXPath(xpath);
HtmlElement element;
int count = coll.Count;
string countString = Convert.ToString(coll.Count);
project.SendInfoToLog(countString);
project.SendInfoToLog("Берем канал из коллекции");
bool blnUnsub = true;
for (int i = 0; i < count; i++)
{
element = coll.ElementAt(i);
project.SendInfoToLog(element.TagName);
//element.RiseEvent("click", "full");
element.Click();
Thread.Sleep(1000);
}
Но в результате получаю тоже самое + ошибку после нескольких повторений:
Тип Время Сообщение
14:31:56 a
14:31:57
14:31:58
14:31:59
14:32:00
14:32:01
14:32:02
14:32:03
14:32:04
14:32:05 "Заданный аргумент находится вне диапазона допустимых значений.
Имя параметра: index"
14:31:56 a
14:31:57
14:31:58
14:31:59
14:32:00
14:32:01
14:32:02
14:32:03
14:32:04
14:32:05 "Заданный аргумент находится вне диапазона допустимых значений.
Имя параметра: index"
А теперь самое интересное, если запустить этот код(с циклом foreach) в firefox, то все работает как надо.
Видимо я что-то упускаю и в chrome надо как-то по другому писать?