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

  • Автор темы Автор темы morfeus
  • Дата начала Дата начала
Приветствую, ты пробовал писать регистратор 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++;
    }
}
 
посмотри внимательно как у тебя именно в зенке верстка формируется. там просто надо xpath составить под верстку , что в зенке.
 
  • Спасибо
Реакции: Advert31337
посмотри внимательно как у тебя именно в зенке верстка формируется. там просто надо xpath составить под верстку , что в зенке.
Тоже это заметил (это кстати React.js такой противный), а когда нажал обновить в браузере зенки, все стало похоже на хром обычный.
Спасибо за ответ. Заработало.
 
[/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]", где меняются только цифры в квадратных скобках. И у одной и той же позиции могут быть разные значения в зависимости от количества опций
 
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>");
 
все удачно получилось. вот вариант с мгновенной установкой нужного элемента.
Классно! То, что нужно было. Только у меня обнаружилось, что неправильно выбирает опцию в селекте. Причина оказалась в том, что id опции, например, id=8. И если выше в списке есть опция с id=84, то включает ее.
Дописал немного строку:
string data_seach = @"value=""" + project.Variables["ID_value"].Value + "\"";
Вроде стало нормально включать нужный пункт в списке. :ay:
 
самое прикольное что в обычном браузере выглядит как у тебя на скрине, а в зенке выглядит вот так.

Посмотреть вложение 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
Нужно выбрать хочу доплату
 
все удачно получилось. вот вариант с мгновенной установкой нужного элемента.
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
 
Помогите, пожалуйста, никак не могу заставить select работать. Добавляю в конструктор действий, нажимаю "Тестировать" значение не подставляется, например, value=12, но если один раз кликаю на это поле с выбором префикса телефона и после этого нажимаю "Тестировать", тогда значение подставляется корректно или нажимаю "Поиск", поле определяется, нажимаю "Тестировать" все корректно подставляется. Когда запускаю шаблон select уже не работает :( Пробовал клик мыши делать в это поле перед установкой value, но это не помогло.

98857
98858
98859
98860
 
Попробовал куски коды из этой темы под себя адаптировать, заменил что на скринах. Код выполняется, но в шаблоке select не работает все равно

98861
98862
 
Заработал вот этот способ

98865


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

98866


98867
 
Помогите, пожалуйста с 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);
}
 
Последнее редактирование:
тебе же не нужна эта переменная, убери ее вообще

Убрал, ошибки теперь нет, но у не выбирает тел префикс. Попробовал и 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 писать не корректно? или дело совсем не в этом
 

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