C# активировать вкладку

V0nek

Client
Регистрация
06.11.2018
Сообщения
12
Благодарностей
3
Баллы
3
Всем доброго времени суток.

Возможно активировать вкладку по домену (находится в переменной {-Variable.domen-}) ?

Т.е. Открыто 5 вкладок, pop1, pop2 и т.д. нужно активировать вкладку соответствующую домену в переменной. :ak:
 

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
581
Баллы
93
C#:
string domain =  project.Variables["domen"].Value; // переменная с доменом, чисто google/yandex/mail/zennolab без www/зоны/прочего
foreach (var s in instance.AllTabs)
{
    if(new Uri(s.URL).Host.Split('.').Reverse().Skip(1).First().Trim().Equals(domain.Trim()))
    {
        s.SetActive();
        return true;
    }
}
 
  • Спасибо
Реакции: Alexmd

V0nek

Client
Регистрация
06.11.2018
Сообщения
12
Благодарностей
3
Баллы
3
К сожалению не вышло активировать.

Выполнение действия CSharp OwnCode. Последовательность не содержит элементов
 

Вложения

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
581
Баллы
93
К сожалению не вышло активировать.

Выполнение действия CSharp OwnCode. Последовательность не содержит элементов
в телегу (в подписи) скинь шаблон, что на скрине
 
  • Спасибо
Реакции: V0nek

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
C#:
string domain =  project.Variables["domen"].Value;
try{
    instance.AllTabs.FirstOrDefault(x=>new Uri(x.URL).Host.Contains(domain)).SetActive();
}catch{throw new Exception("не найдено вкладки с доменом");}
Я так понимаю, что вкладки открываются самостоятельно и не Вы контролируете их открытие. Тогда правильнее будет на каждую "полезную" вкладку вешать свое имя и работать с именами вкладок, и время от времени закрывать лишние и ненужные, а то неизвестно, куда там может увести тот или иной редирект.
Вот так можно позакрывать все неугодные вкладки.
C#:
var names = project.Variables["names"].Value;// в переменной names имена всех подконтрольных вкладок хоть списком, хоть через запятую, как удобно
instance.AllTabs.ToList().ForEach(x=>
{
    if(!names.Contains(x.Name))x.Close();
});
 
Последнее редактирование:
  • Спасибо
Реакции: Ilshakin

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
581
Баллы
93
не имеет значения, пользователь открывает вкладки или они сами после клика открываются -
коллекция AllTabs в любом случае должна собираться ....
видимо в 7.7.3 поломали что то, порой да же скриншот нельзя сделать ...
 

V0nek

Client
Регистрация
06.11.2018
Сообщения
12
Благодарностей
3
Баллы
3
  • Спасибо
Реакции: Ilshakin

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
639
Благодарностей
581
Баллы
93
C#:
string domain =  project.Variables["domen"].Value;
try{
    instance.AllTabs.FirstOrDefault(x=>new Uri(x.URL).Host.Contains(domain)).SetActive();
}catch{throw new Exception("не найдено вкладки с доменом");}
Я так понимаю, что вкладки открываются самостоятельно и не Вы контролируете их открытие. Тогда правильнее будет на каждую "полезную" вкладку вешать свое имя и работать с именами вкладок, и время от времени закрывать лишние и ненужные, а то неизвестно, куда там может увести тот или иной редирект.
Вот так можно позакрывать все неугодные вкладки.
[/CODE]
.Contains(domain)) - это не совсем корректный код, я неспроста наговнокодил такую конструкцию:
C#:
new Uri(s.URL).Host.Split('.').Reverse().Skip(1).First().Trim().Equals(domain.Trim())
ибо нам нужно точное вхождение на домен, как пример:

https://1ya.ru/ - доска объявлений
https://ya.ru/ - поисковик

находясь на https://1ya.ru/ - активировать https://ya.ru/ через .Contains уже не получится ...
и еще масса вариантов, когда new Uri.Host перед top-level будет иметь несколько точек впереди
 
  • Спасибо
Реакции: Alexmd

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
.Contains(domain)) - это не совсем корректный код, я неспроста наговнокодил такую конструкцию:
C#:
new Uri(s.URL).Host.Split('.').Reverse().Skip(1).First().Trim().Equals(domain.Trim())
ибо нам нужно точное вхождение на домен, как пример:

https://1ya.ru/ - доска объявлений
https://ya.ru/ - поисковик

находясь на https://1ya.ru/ - активировать https://ya.ru/ через .Contains уже не получится ...
и еще масса вариантов, когда new Uri.Host перед top-level будет иметь несколько точек впереди
Это вполне очевидное замечание, однако, маловероятно, что в бою такое попадется и я решил не усложнять, а сделать упор на то, что лучше постараться работать с именами вкладок. Например, открываешь вкладку с сайтом "site.ru" и назначаешь ей имя "моя вкладка". Потом обращаешься к этой вкладке по имени и никто не мешает возвращаться к проверке на соответствие домена, вдруг, там произошел редирект на "subdomain.site.ru", твой код схавает это, как и мой, впрочем, но это уже другой сайт по сути, а это повлечет за собой другие ошибки. Тут можно уже дальше развивать логику действий, но происходить это будет в нужной вкладке. А, если средиректило, например, на зеркало, находящееся на совершенно другом домене? лишняя вкладка останется висеть открытой и вскоре, возможно, вообще уронит инстанс. Так что, ориентироваться на одну только адресную строку в корне неправильно.
Часто решает не качество говнокода, а тщательно продуманная логика действий. Вот я о чем.
 
  • Спасибо
Реакции: Ilshakin

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