Greasemonkey - объединение действий прокрутки и щелчка мыши - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть куча ссылок на странице, где я играю в игру.

Требуется прокрутить ссылку и щелкнуть по ней. Мне удалось щелкнуть по нему.

function clickLinkWithText () {
    var links = $('a[href*="xyz.com"]');
    var randomNum = Math.floor(Math.random()*links.length);   
    var targetLink = links.get(randomNum);
    triggerMouseEvent (targetLink, "click"); 
}

Но сначала, как мне перейти к элементу, а затем щелкнуть по нему. Что я должен изменить здесь?

function scrollToElement() {    
   window.setTimeout("window.scrollTo(0, document.body.offsetHeight);", 
   1000);
};

window.addEventListener('mouseover',function() {
    scrollToElement()
},true);

1 Ответ

0 голосов
/ 15 сентября 2018

В большинстве браузеров вы можете прокрутить элемент, вызвав на нем scrollIntoView(). Затем вы можете установить небольшой тайм-аут (чтобы браузер успел прокрутить элемент), после чего вы можете нажать на элемент. Например, следующий скрипт пользователя прокручивает до вашего имени пользователя и щелкает по нему:

// ==UserScript==
// @name         scroll-click
// @namespace    CertainPerformance
// @version      1
// @match        /10967270/greasemonkey-obedinenie-deistvii-prokrutki-i-schelchka-myshi
// @grant        none
// ==/UserScript==

const a = document.querySelector('a[href="/users/1089173/curiousdev"]');

function scrollToElement() {
  a.scrollIntoView();
  setTimeout(() => {
    a.click();
  }, 1000);
};

window.addEventListener('mouseover', scrollToElement);

Обратите внимание, что в jQuery нет необходимости, и что вы можете передать имя функции напрямую в addEventListener, а не оборачивать его в другую анонимную функцию.

Также старайтесь избегать передачи строк в setTimeout - это в основном то же самое, что и eval. Лучше передать фактическую функцию.

...