Задать вопрос
@denismix

Как на js или jq кликнуть на первые 100 элементов HTML (начиная с верха страницы) id которых начинается на «oOR»?

Сори, html код предоставить затруднительно, т.к. это запароленный личный кабинет, там куча коммерческой инфы и сам код страницы огромный.

Следующая конструкция кликает на ВСЕ подходящие элементы, но их там более 3500, и система виснет
$('[id^="oOR"]').click();

Для имитации клика использую расширение для Оперы "Scripter", он автоматом подключает jQuery и делает Глобальный скрипт.
  • Вопрос задан
  • 435 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Кого и сколько надо кликнуть:

const selector = '[id^="oOR"]';
const clickCount = 100;

Кликаем:

$(selector).slice(0, clickCount).click();

// или

[...document.querySelectorAll(selector)].slice(0, clickCount).forEach(n => n.click());

UPD. Вынесено из комментариев:

из-за "одновременного" клика все виснет

Может подскажете конструкцию с .delay() (или чем то аналогичным)

Функция, с помощью которой можно обрабатывать массивоподобные объекты по частям с задержкой:

function chunkedAndDelayed(data, delay, chunkSize, onChunk) {
  const getChunk = (data.slice || Array.prototype.slice).bind(data);

  (function nextChunk(i) {
    if (i < data.length) {
      onChunk(getChunk(i, i + chunkSize));
      setTimeout(nextChunk, delay, i + chunkSize);
    }
  })(0);
}

C каким интервалом и по сколько за раз надо кликать:

const delay = 500;
const clickChunkSize = 5;

Кликаем:

chunkedAndDelayed(
  $(`${selector}:lt(${clickCount})`),
  delay,
  clickChunkSize,
  $elems => $elems.click()
);

// или

chunkedAndDelayed(
  Array.prototype.slice.call(document.querySelectorAll(selector), 0, clickCount),
  delay,
  clickChunkSize,
  elems => elems.forEach(n => n.click())
);
Ответ написан
@denismix Автор вопроса
Всем ОГРОМНОЕ спасибо, разобрался =)

var elems = $('[id^="oOR"]').slice(0, 100);

elems.each(function(index) {
  setTimeout(() => $(this).click(), index * 500);
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
Ну раз виснет, значит снизь нагрузку. Ты разом хочешь кликнуть, вот и виснет. А ты кликай их по очереди.
var elems = $('div');

elems.each(function(index) {
	setTimeout(() => $(this).click(), index * 5);
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы