Yandex Market

  • Автор темы Автор темы MaxLucky
  • Дата начала Дата начала

MaxLucky

Client
Регистрация
13.08.2017
Сообщения
239
Реакции
18
Баллы
18
Добрый день. Столкнулся с проблемой при написании шаблона. Задача была написать шаблон, под заполнение карточек товаров на Яндекс Маркете.

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

Решил делать через эмуляцию клавиатуры, но в процессе понял, что категорий товаров около 20. И почти в каждой категории добавляется новое поле, из-за которой требуется новая логика. Плюс из-за полей, которые меняются местами, всё ещё сложнее становится. Можно конечно все варианты проработать, но это очень много времени.

Xpath как понимаю, тоже не подходит в таком случае.

Может подскажете, как можно решить проблему?
 

Вложения

  • Screenshot_4.jpg
    Screenshot_4.jpg
    52,1 KB · Просмотры: 27
  • Screenshot_5.jpg
    Screenshot_5.jpg
    30 KB · Просмотры: 27
Зачем тебе эти id, class и прочее. Есть innerhtml, outerhtml, fultag и т.д. и т.п. Ни разу xpath не использовал, все задачи закрываю стандартными методами поиска элементов)
 
Добрый день. Столкнулся с проблемой при написании шаблона. Задача была написать шаблон, под заполнение карточек товаров на Яндекс Маркете.

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

Решил делать через эмуляцию клавиатуры, но в процессе понял, что категорий товаров около 20. И почти в каждой категории добавляется новое поле, из-за которой требуется новая логика. Плюс из-за полей, которые меняются местами, всё ещё сложнее становится. Можно конечно все варианты проработать, но это очень много времени.

Xpath как понимаю, тоже не подходит в таком случае.

Может подскажете, как можно решить проблему?
Третья ссылка в яндексе
 
  • Оценить
Реакции: ZX
Зачем тебе эти id, class и прочее. Есть innerhtml, outerhtml, fultag и т.д. и т.п. Ни разу xpath не использовал, все задачи закрываю стандартными методами поиска элементов)
Там всё равно уникальные значения получаются
 
Там всё равно уникальные значения получаются
Быть такого не может. Всегда можно найти уникальный)) Поискать?
Кинь ссылку как заполнять, и что надо сделать что бы id поменялись?

Если я ошибусь, то сделаю тебе костыль))
 
Глянул, там правда нет уник элементов в поле для ввода, есть 2 пути решения. Костыль и правильно.

1) Костыль. Берем элемент по имени
2022-07-05_164606.jpg

Расчитываем его место положение. Потом математически рассчитываем клик до поля и кликаем в него.

2) С использованием коллекции элементов (тут не подскажу, т.к. такую задачу сам не решал еще, мне помогали, но как раз учу шарп, может через недельку смогу)
 
  • Оценить
Реакции: MaxLucky
Вот костыль, будет тонна кубиков на каждый клик, но куда деватся) Взял со старого шаба, чутка пошаманил с математикой, можешь сам высчитывать как тебе удобно. Основа есть. дальше сам.
 

Вложения

  • Оценить
Реакции: MaxLucky
Вот костыль, будет тонна кубиков на каждый клик, но куда деватся) Взял со старого шаба, чутка пошаманил с математикой, можешь сам высчитывать как тебе удобно. Основа есть. дальше сам.
Благодарю!
 
Глянул, там правда нет уник элементов в поле для ввода, есть 2 пути решения. Костыль и правильно.

1) Костыль. Берем элемент по имени
Посмотреть вложение 94025

Расчитываем его место положение. Потом математически рассчитываем клик до поля и кликаем в него.

2) С использованием коллекции элементов (тут не подскажу, т.к. такую задачу сам не решал еще, мне помогали, но как раз учу шарп, может через недельку смогу)
Такого я еще не встречал. Вот это метод :D
 
  • Оценить
Реакции: Mikhail B.
Такого я еще не встречал. Вот это метод :D
Да это костыль огромный, куда деватся, надо как то решать задачу было. Решил тогда так. Сейчас конечно стоило бы заморочится с коллекциями, но думаю и там не все так гладко. А вобще если у яндекса апи реал работает на постинг товаров, то лучше уж потратить время на изучение API.
 
Ещё столкнулся с проблемой. Логика должна быть такая, если цвет, который мы получили, если у них в базе данных, то должен производиться клик по чекбоксу. Если же нету (не высвечивается ни один вариант) - то в поле ниже. Проблема именно, в том, чтобы понять как определять появился чекбокс или нет. Потому что как элемент прощёлкивается, даже если он не появился на страничке
 

Вложения

  • Screenshot_9.jpg
    Screenshot_9.jpg
    31,1 KB · Просмотры: 7
  • Screenshot_10.jpg
    Screenshot_10.jpg
    33,1 KB · Просмотры: 7
Ещё столкнулся с проблемой. Логика должна быть такая, если цвет, который мы получили, если у них в базе данных, то должен производиться клик по чекбоксу. Если же нету (не высвечивается ни один вариант) - то в поле ниже. Проблема именно, в том, чтобы понять как определять появился чекбокс или нет. Потому что как элемент прощёлкивается, даже если он не появился на страничке
У чекбоксов что то типо true false. Смотри внимательней.
 
Вот костыль, будет тонна кубиков на каждый клик, но куда деватся) Взял со старого шаба, чутка пошаманил с математикой, можешь сам высчитывать как тебе удобно. Основа есть. дальше сам.
Ещё такой вопрос: Бывает зенка кликает не туда, особенно когда нужно проскролить к элементу и тыкнуть. Но заметил, что в проджект мейкере, если уменьшать, увеличивать окно - то результат разный бывает. Изменится это при выполнении в самой зенке? Или нужно делать так, чтобы все элементы были в зоне видемости? Скролить перед этим...
 
Ещё такой вопрос: Бывает зенка кликает не туда, особенно когда нужно проскролить к элементу и тыкнуть. Но заметил, что в проджект мейкере, если уменьшать, увеличивать окно - то результат разный бывает. Изменится это при выполнении в самой зенке? Или нужно делать так, чтобы все элементы были в зоне видемости? Скролить перед этим...
Уровень эмуляции меняй у клика и будет норм. там 4 скорости, на второй норм кликает.
 
  • Оценить
Реакции: MaxLucky
Уровень эмуляции меняй у клика и будет норм. там 4 скорости, на второй норм кликает.
instance.ActiveTab.FullEmulationMouseSetOptions(Global.Classes.rnd.Next(0, 1),Global.Classes.rnd.Next(0, 1),Global.Classes.rnd.Next(0, 1)); // скорость

Это выставляется от и до. От 1 до 2 получается?
1 самая быстрая?
 
Но скорее всего дело не в скорости, шаблон не видет подвала с кнопкой, и кликает по ней
 

Вложения

  • Screenshot_2.jpg
    Screenshot_2.jpg
    74,9 KB · Просмотры: 6
instance.ActiveTab.FullEmulationMouseSetOptions(Global.Classes.rnd.Next(0, 1),Global.Classes.rnd.Next(0, 1),Global.Classes.rnd.Next(0, 1)); // скорость

Это выставляется от и до. От 1 до 2 получается?
1 самая быстрая?
это не та скорость) но тоже можно крутить
 

Вложения

  • Screenshot_3.jpg
    Screenshot_3.jpg
    32,2 KB · Просмотры: 5
В самом екшене.
double TickCount1 = double.Parse(project.Variables["t_1"].Value.Replace(".", ",")); // t_1 переменная с координатами
double TickCount2 = double.Parse(project.Variables["t_2"].Value.Replace(".", ",")); // t_2 переменная с координатами
int TickCount11 = Convert.ToInt32(TickCount1); // конверт из дробного в целые
int TickCount22 = Convert.ToInt32(TickCount2); // конверт из дробного в целые
instance.ActiveTab.FullEmulationMouseSetOptions(Global.Classes.rnd.Next(0, 10),Global.Classes.rnd.Next(0, 10),Global.Classes.rnd.Next(0, 10)); // скорость
instance.ActiveTab.FullEmulationMouseMove(TickCount11,TickCount22); // движение к полю
instance.ActiveTab.FullEmulationMouseClick("left", "click"); // клик

Подскажи пожалуйста где именно...
 
Так клик происходит через C# экшн. Тут же ваше решение использовали с поиском по координатам
Значит придется по новой пилить.

Вот я делал себе недавно. Погугли код. сделай под себя. Делаешь клик, потом конвертируешь в шарп, и меняешь в коде строку с элементами.

C#:
Развернуть Свернуть Копировать
// герерируем скорость мышки
Random rand = new Random();
instance.ActiveTab.FullEmulationMouseSetOptions(rand.Next(4,6),rand.Next(4,6),rand.Next(13,18));

// Конструктор действий, тип RiseEvent
HtmlElement he = instance.ActiveTab.FindElementByAttribute("textarea", "data-marker", "reply/input", "regexp", 0);
if (he.IsVoid) return -1;

// Задержка эмуляции
instance.WaitFieldEmulationDelay();
// Вызвать событие "click"
he.RiseEvent("click", "Full");
 
Пзд люди заморачиваются. Спарсь айди фильтров и ссылками делай что тебе нужно. И через амперсант передавай параметры &glfilter=ид_фильтра
 
ампер куда сант?))
заморачиваемся в меру своей необразованности :D
Ну ты главное понял. Кому сильно нужно, пусть изучают. Маркет я в хвост и гриву с 13 года юзаю. Были времена.
 
  • Оценить
Реакции: Mikhail B.
  • Оценить
Реакции: Mikhail B.

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