Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите доделать js script

Remembrance Профи (597), закрыт 7 месяцев назад
Добрый день. Я в js полный 0, начал его изучать пару дней назад из-за вынужденных обстоятельств. В общем и целом. У меня есть скрипт который на определённом сайте при нажатии на кнопку открывает какое-то окно, далее во вторую колонку вписывает какой-то текст, выбирает из списка нужны и затем сохраняет.
Вот мой скрипт
async function processZone1(zoneValue, addButton) {
addButton.click ();
const smallModal = await waitForElm('div.ModalV2--G14QC.src-styles-commonStyles-module__modalBody--TFAd4');
const zoneNameInput = smallModal.querySelector('input[data-test="select-single-input-data-test"]');
zoneNameInput.focus();
zoneNameInput.value = zoneValue;
zoneNameInput.dispatchEvent(new Event('input', { bubbles: true }));
const saveButton = await waitForElm('button.button--ruJL- size--M--aJZML variant--primary--tMj-Q');
if (saveButton) {
saveButton.click ();
}
await waitForElmToBeRemoved(smallModal);
Всё работает до того момента как нужно выбрать элемент
Т.е после строчки zoneNameInput.dispatchEvent(new Event('input', { bubbles: true }));
Нужно сделать так чтобы при вводе какой-нибудь инфы в строчку вылезает окно с выбором секторов и нажать на самый первый из них. Помогите Пж. Скрины сайта прилагаю
Дополнен 9 месяцев назад
https: //imageup.ru/img153/4760302/2.jpeg.html
https: //imageup.ru/img199/4760303/1.jpeg.html
https: //imageup.ru/img10/4760304/3.jpeg.html
Ссылки на фотки если видно неразборчиво
Лучший ответ
андрей петров Знаток (429) 9 месяцев назад
Чтобы выбрать элемент из выпадающего списка, можно использовать "keydown", эмулируя нажатие клавиши стрелки вниз и клавиши Enter. Вот как можно модифицировать твой код:

async function processZone1(zoneValue, addButton) {
addButton.click();
const smallModal = await waitForElm('div.ModalV2--G14QC.src-styles-commonStyles-module__modalBody--TFAd4');
const zoneNameInput = smallModal.querySelector('input[data-test="select-single-input-data-test"]');

// Вводим значение
zoneNameInput.focus();
zoneNameInput.value = zoneValue;
zoneNameInput.dispatchEvent(new Event('input', { bubbles: true }));

// Ожидаем появления списка секторов
const sectorList = await waitForElm('ul[data-test="select-single-dropdown-data-test"]');

// Эмулируем нажатие клавиши вниз
zoneNameInput.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 40, key: 'ArrowDown' }));

// Эмулируем нажатие клавиши Enter
zoneNameInput.dispatchEvent(new KeyboardEvent('keydown', { keyCode: 13, key: 'Enter' }));

// Ждем сохранения
const saveButton = await waitForElm('button.button--ruJL- size--M--aJZML variant--primary--tMj-Q');
if (saveButton) {
saveButton.click();
}

await waitForElmT
oBeRemoved(smallModal);
}

Этот код сначала эмулирует ввод значения, затем ожидает появления списка секторов, эмулирует нажатие клавиши вниз для выбора первого элемента и затем клавиши Enter для подтверждения выбора.
RemembranceПрофи (597) 9 месяцев назад
Я тоже изначально так хотел, но к сожалению стрелка вниз не работает для выбора элемента из списка. А можно ли как-то нажать на сам элемент (например через click() )
андрей петров Знаток (429) Remembrance,
 // Кликаем по первому элементу списка 
  if (firstSector) { 
    firstSector.click(); 
  } 
 
  // Ждем сохранения 
  const saveButton = await waitForElm('button.button--ruJL- size--M--aJZML variant--primary--tMj-Q'); 
  if (saveButton) { 
    saveButton.click(); 
  } 
думаю, что так должно получится, проверь))
RemembranceПрофи (597) 9 месяцев назад
Огромное спасибо, добавил ещё константу для первого сектора
const firstSector = await waitForElm('div > div.ModalV2Content--jlidV > div:nth-child(2) > div > div.popper--XJqLm.fluid--IAePK > div > li:nth-child(1)');
андрей петров Знаток (429) Remembrance, ?
Остальные ответы
Похожие вопросы