Помогите с Select и Option плз...

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Приветствую, ты пробовал писать регистратор shopify?
там тэги без атрибута selected и даже на простое событие клик выпадающее меню не реагирует...
Сама трагедия происходит при регистрации на странице вида
{login}.myshopify.com/admin/account_setup
самое прикольное что в обычном браузере выглядит как у тебя на скрине, а в зенке выглядит вот так.

55282


под такую верстку зашел код , где ID_value выставил AL
C#:
//---- входные параметры -------------------------------------------------
string data_seach     = @"value=""" + project.Variables["ID_value"].Value;
string xpath         = "//*[@id='country']";
string xpath_opt     = ".//option";
//-------------------------------------------------------------------------
string result = "" ; int id1=0; List<string> lst_Find = new List<string>();
var he2= instance.ActiveTab.FindElementByXPath(xpath,0);
try { lst_Find = ZennoPoster.Parser.ParseByXpath(he2.OuterHtml, xpath_opt, "OuterHtml" ).ToList(); } catch{}
if (lst_Find.Count > 0) {
    foreach (string he_opt in lst_Find) {
        if (he_opt.IndexOf(data_seach) != -1) {
            he2.SetValue(id1.ToString(), "None", false);
            return 0;
        }
        id1++;
    }
}
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
посмотри внимательно как у тебя именно в зенке верстка формируется. там просто надо xpath составить под верстку , что в зенке.
 
  • Спасибо
Реакции: Advert31337

Advert31337

Client
Регистрация
18.12.2016
Сообщения
53
Благодарностей
38
Баллы
18
посмотри внимательно как у тебя именно в зенке верстка формируется. там просто надо xpath составить под верстку , что в зенке.
Тоже это заметил (это кстати React.js такой противный), а когда нажал обновить в браузере зенки, все стало похоже на хром обычный.
Спасибо за ответ. Заработало.
 

olegboev

Client
Регистрация
10.09.2019
Сообщения
24
Благодарностей
1
Баллы
3
[/QUOTE]
все удачно получилось. вот вариант с мгновенной установкой нужного элемента.
C#:
//---- входные параметры -------------------------------------------------
string data_seach     = @"value=""" + project.Variables["ID_value"].Value;
string xpath         = "//*[@id='parent']";
string xpath_opt     = ".//option";
//-------------------------------------------------------------------------
string result = "" ; int id1=0; List<string> lst_Find = new List<string>();
var he2= instance.ActiveTab.FindElementByXPath(xpath,0);
try { lst_Find = ZennoPoster.Parser.ParseByXpath(he2.OuterHtml, xpath_opt, "OuterHtml" ).ToList(); } catch{}
if (lst_Find.Count > 0) {
    foreach (string he_opt in lst_Find) {
        if (he_opt.IndexOf(data_seach) != -1) {
            he2.SetValue(id1.ToString(), "None", false);
            return 0;
        }
        id1++;
    }
}
Помогите разобраться, что не так делаю... Как заменить в данном коде:
string xpath = "//*[@id='parent']";
на свою переменную. Пробовал так: = "//*[@name='project.Variables["q2"].Value']"; - код не срабатывает, выдает в ошибку.
Т.е. вместо 'parent' нужно вставить свою переменную. Столкнулся с тем, что у вариативных опций товаров нет уникального ID или другого какого атрибута. Он то есть, но в виде - "product_option[1][product_option_value][12][option_value_id]", где меняются только цифры в квадратных скобках. И у одной и той же позиции могут быть разные значения в зависимости от количества опций
 

legorange

Client
Регистрация
22.04.2020
Сообщения
13
Благодарностей
34
Баллы
13
Sorry, I don't know if this will help you, I don't read your language well, sorry:

Change all InnerHtml of <select ....>

where

<option value = "V1"> Text1 </option>
<option value = "V2"> Text2 </option>
.
.
<option value = "Vn"> Textn </option>

Write only the one that interests; (example option "8")

/ Action designer, type Set
HtmlElement he = instance.ActiveTab.GetDocumentByAddress ("0"). FindElementByTag ("form", 0) .FindChildById ("country");
if (he.IsVoid) return -1;
// Assign value to attribute "innerhtml"
he.SetAttribute ("innerhtml", "<option value = \" V8 \ "selected = \" selected \ "> Text8 </option>");
 

Yuras

Client
Регистрация
05.01.2012
Сообщения
15
Благодарностей
3
Баллы
3
все удачно получилось. вот вариант с мгновенной установкой нужного элемента.
Классно! То, что нужно было. Только у меня обнаружилось, что неправильно выбирает опцию в селекте. Причина оказалась в том, что id опции, например, id=8. И если выше в списке есть опция с id=84, то включает ее.
Дописал немного строку:
string data_seach = @"value=""" + project.Variables["ID_value"].Value + "\"";
Вроде стало нормально включать нужный пункт в списке. :ay:
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
самое прикольное что в обычном браузере выглядит как у тебя на скрине, а в зенке выглядит вот так.

Посмотреть вложение 55282

под такую верстку зашел код , где ID_value выставил AL
C#:
//---- входные параметры -------------------------------------------------
string data_seach     = @"value=""" + project.Variables["ID_value"].Value;
string xpath         = "//*[@id='country']";
string xpath_opt     = ".//option";
//-------------------------------------------------------------------------
string result = "" ; int id1=0; List<string> lst_Find = new List<string>();
var he2= instance.ActiveTab.FindElementByXPath(xpath,0);
try { lst_Find = ZennoPoster.Parser.ParseByXpath(he2.OuterHtml, xpath_opt, "OuterHtml" ).ToList(); } catch{}
if (lst_Find.Count > 0) {
    foreach (string he_opt in lst_Find) {
        if (he_opt.IndexOf(data_seach) != -1) {
            he2.SetValue(id1.ToString(), "None", false);
            return 0;
        }
        id1++;
    }
}
Помоги пожалуйста с Select
C#:
<div class="rows"><label class="label grey">Условия обмена</label> <div class="indent"><select class="span3 mb-15 fl-l"><option value="0">Без доплаты</option> <option value="1">Моя доплата</option> <option value="-1">Хочу доплату</option></select> <!----></div></div>
1622393213420.png
Нужно выбрать хочу доплату
 

baracuda

Client
Регистрация
19.06.2013
Сообщения
793
Благодарностей
278
Баллы
63
все удачно получилось. вот вариант с мгновенной установкой нужного элемента.
C#:
//---- входные параметры -------------------------------------------------
string data_seach     = @"value=""" + project.Variables["ID_value"].Value;
string xpath         = "//*[@id='parent']";
string xpath_opt     = ".//option";
//-------------------------------------------------------------------------
string result = "" ; int id1=0; List<string> lst_Find = new List<string>();
var he2= instance.ActiveTab.FindElementByXPath(xpath,0);
try { lst_Find = ZennoPoster.Parser.ParseByXpath(he2.OuterHtml, xpath_opt, "OuterHtml" ).ToList(); } catch{}
if (lst_Find.Count > 0) {
    foreach (string he_opt in lst_Find) {
        if (he_opt.IndexOf(data_seach) != -1) {
            he2.SetValue(id1.ToString(), "None", false);
            return 0;
        }
        id1++;
    }
}
Дата ставиться. все хорошо по этому коду. но при регистрации на mail.ru
вот такой неприятный синдром. почему то не работает
78109
 

prostors

Client
Регистрация
16.12.2020
Сообщения
1 016
Благодарностей
33
Баллы
48
87334
такое решение
 

frgts

Пользователь
Регистрация
14.04.2022
Сообщения
34
Благодарностей
2
Баллы
8
Помогите, пожалуйста, никак не могу заставить select работать. Добавляю в конструктор действий, нажимаю "Тестировать" значение не подставляется, например, value=12, но если один раз кликаю на это поле с выбором префикса телефона и после этого нажимаю "Тестировать", тогда значение подставляется корректно или нажимаю "Поиск", поле определяется, нажимаю "Тестировать" все корректно подставляется. Когда запускаю шаблон select уже не работает :( Пробовал клик мыши делать в это поле перед установкой value, но это не помогло.

98857
98858
98859
98860
 

frgts

Пользователь
Регистрация
14.04.2022
Сообщения
34
Благодарностей
2
Баллы
8
Попробовал куски коды из этой темы под себя адаптировать, заменил что на скринах. Код выполняется, но в шаблоке select не работает все равно

98861
98862
 

frgts

Пользователь
Регистрация
14.04.2022
Сообщения
34
Благодарностей
2
Баллы
8
Заработал вот этот способ

98865


Префикс страны выставляется, но возникла другая проблема, когда жму получить код, префикс страны сбрасывается на дефолтный, который стоял до выбора префикса(

98866


98867
 

frgts

Пользователь
Регистрация
14.04.2022
Сообщения
34
Благодарностей
2
Баллы
8
Помогите, пожалуйста с select. Простой замены на свои Value и id не помогает(

105638



В качестве value должны быть цифры в коде, а у меня буквы. Код выполняется с ошибкой. Если меняю на цифры, то кубик выполняется, но select не срабатывает естественно, потому что value левый


C#:
//Random rnd = new Random();
//string kat = project.Variables["kategoriya"].Value;
int sotrydn = int.Parse(project.Variables["FR"].Value);
string xpath = ".//option[@value='"+project.Variables["FR"].Value+"']";

HtmlElement he = instance.ActiveTab.MainDocument.FindElementByName("phoneCountryCode");
HtmlElementCollection all_elements = he.FindChildrenByXPath(".//option");
HtmlElementCollection target_elements = he.FindChildrenByXPath(xpath);

if (all_elements.Count > 0 && target_elements.Count>0 ) {
    // удаляем атрибут selected со старого элемента
    foreach (HtmlElement he_opt in all_elements) {
        if (he_opt.OuterHtml.IndexOf("selected") != -1) {
            he_opt.RemoveAttribute("selected");
        }
    }

  //  int he_rnd = rnd.Next(0, all_elements.Count);
    HtmlElement he_option = target_elements.Elements[0];

    // Вариант 1:
    he_option.SetAttribute("selected", "selected");
    he_option.RiseEvent("onchange", "Full");

    // Вариант 2: (раскоментировать его и закомментировать предыдущий)
    //he.SetAttribute("selecteditems", he_option.InnerHtml);
}
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

frgts

Пользователь
Регистрация
14.04.2022
Сообщения
34
Благодарностей
2
Баллы
8
тебе же не нужна эта переменная, убери ее вообще
Убрал, ошибки теперь нет, но у не выбирает тел префикс. Попробовал и 1й и 2й варианты этого кода

C#:
//Random rnd = new Random();
//string kat = project.Variables["kategoriya"].Value;
//int sotrydn = int.Parse(project.Variables["tel_prefix"].Value);
string xpath = ".//option[@value='"+project.Variables["tel_prefix"].Value+"']";

HtmlElement he = instance.ActiveTab.MainDocument.FindElementByName("phoneCountryCode");
HtmlElementCollection all_elements = he.FindChildrenByXPath(".//option");
HtmlElementCollection target_elements = he.FindChildrenByXPath(xpath);

if (all_elements.Count > 0 && target_elements.Count>0 ) {
    // удаляем атрибут selected со старого элемента
    foreach (HtmlElement he_opt in all_elements) {
        if (he_opt.OuterHtml.IndexOf("selected") != -1) {
            he_opt.RemoveAttribute("selected");
        }
    }

  //  int he_rnd = rnd.Next(0, all_elements.Count);
    HtmlElement he_option = target_elements.Elements[0];

    // Вариант 1:
    he_option.SetAttribute("selected", "selected");
    he_option.RiseEvent("onchange", "Full");

    // Вариант 2: (раскоментировать его и закомментировать предыдущий)
    //he.SetAttribute("selecteditems", he_option.InnerHtml);
}
в этой же теме нашел еще одну версию кода, но мозгов не хватает как тут подставить мои переменные

шаблон

C#:
//---- входные параметры -------------------------------------------------
string data_seach     = @"value=""" + project.Variables["ID_value"].Value;
string xpath         = "//*[@id='parent']";
string xpath_opt     = ".//option";
//-------------------------------------------------------------------------
string result = "" ; int id1=0; List<string> lst_Find = new List<string>();
var he2= instance.ActiveTab.FindElementByXPath(xpath,0);
try { lst_Find = ZennoPoster.Parser.ParseByXpath(he2.OuterHtml, xpath_opt, "OuterHtml" ).ToList(); } catch{}
if (lst_Find.Count > 0) {
    foreach (string he_opt in lst_Find) {
        if (he_opt.IndexOf(data_seach) != -1) {
            he2.SetValue(id1.ToString(), "None", false);
            return 0;
        }
        id1++;
    }
}
это адаптированный под меня код

C#:
//---- входные параметры -------------------------------------------------
string data_seach     = @"value=""" + project.Variables["tel_prefix"].Value;
string xpath         = "//*[@Name='phoneCountryCode']";
string xpath_opt     = ".//option";
//-------------------------------------------------------------------------
string result = "" ; int id1=0; List<string> lst_Find = new List<string>();
var he2= instance.ActiveTab.FindElementByXPath(xpath,0);
try { lst_Find = ZennoPoster.Parser.ParseByXpath(he2.OuterHtml, xpath_opt, "OuterHtml" ).ToList(); } catch{}
if (lst_Find.Count > 0) {
    foreach (string he_opt in lst_Find) {
        if (he_opt.IndexOf(data_seach) != -1) {
            he2.SetValue(id1.ToString(), "None", false);
            return 0;
        }
        id1++;
    }
}
У меня нет id, а есть name. Возможно @Name писать не корректно? или дело совсем не в этом
 

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