Для начала давайте поймем а что именно вам нужно
Если задача кликнуть, значит элемент, очевидно, должен быть кликабельным
Значит это либо button, либо input[type="button"], либо тег a
Код который вы привели в пример (назвав его 1 вариантом) выбирает все теги на странице, а затем проверяет каждый из них. Это значит, что кнопка, прописанная в html как
<button> <span>текст</span> </button>
будет кликнута
(а точнее, будет вызван обработчик клика по ней) как минимум 2 раза
(первый, когда кликаем на тег span, второй когда жмем на тег button)
Отсюда и возникает баг с многоразовым нажатием
Если задача и правда сводится к тому, что нужно проверить все элементы, и, если они содержат какой-то текст, кликнуть на них, то логичнее использовать код, который и выбирает только кликабельные элементы. Примерно так:
const items = document.querySelectorAll("input[type=button], button, a");
items.forEach((item)=>{
if (item.textContent.includes("Your Text Here")){
console.log("success");
items[i].click();
}
});
Это не только поможет избежать багов, но и существенно ускорит ваш код
P.S.: Любые операции с DOM-деревом заметно замедляют ваш код. Старайтесь как можно реже использовать подход с проверкой содержимого всех DOM-элементов (как в этом кейсе).