Как активировать нажатие кнопки на веб-сайте, который использует History API HTML5 с помощью JavaScript?

Я разрабатываю расширение Chrome, которое автоматизирует щелчок. Мое расширение работало над многостраничным приложением. Он может нажимать кнопки на сайте. Но у меня проблема с этим конкретным веб-сайтом, который представляет собой одностраничное приложение.

Мое расширение не может инициировать нажатие кнопки с помощью этого JavaScript

function clickButton(){
var submit =  document.getElementsByClassName(".class");
submit.click();
}

Мой вопрос: как вызвать нажатие кнопки в одностраничном приложении? Потому что кажется, что использование .click() не работает

Дополнительная информация

Мое расширение работает следующим образом: я нажимаю кнопку поиска, и оно показывает мне результат. Если есть результат, я делаю конкретные вещи. Но если результат пуст, я возвращаюсь на предыдущую страницу (страницу поиска) и снова нажимаю кнопку поиска. И мое расширение не может нажать кнопку поиска или кнопку «Назад». Я предполагаю, что когда я нажимаю кнопку с помощью .click(), Интернет не запрашивает отображение этой конкретной HTML-страницы. Я ошибся?

Другая информация об этом сайте

Таким образом, эта сеть представляет собой одностраничное приложение. После входа на этот сайт я попадаю на страницу https://sample.com/page1, которая является дом. Затем я перехожу на страницу поиска (URL-адрес все тот же, но он показывает другой макет, то есть страницу поиска). На странице поиска я ввожу параметры поиска, затем нажимаю кнопку поиска (URL-адрес остается тем же, но показывает другой макет, то есть результаты поиска). Итак, я предполагаю, что этот веб-сайт работает так: каждый раз, когда я нажимаю на определенную страницу, он запрашивает макет страницы, используя history.pushState -я думаю. Итак, мне интересно, есть ли способ манипулировать этим history.pushState? Например, вместо того, чтобы нажимать кнопку «Назад», я могу просто сразу перейти на нужную страницу?


person ari fazola    schedule 19.02.2020    source источник
comment
Трудно ответить, не видя кода сайта, но даже в 3 строках кода, которые вы предоставили, есть как минимум 2 проблемы: 1, getElementsByClassName возвращает объект, подобный массиву, где .click() не будет работать. 2, getElementsByClassName ожидает имя класса (без .), и вы, кажется, вызываете его с помощью селектора (с .) developer.mozilla.org/en-US/docs/Web/API/Document/   -  person Gergely Szabo    schedule 20.02.2020
comment
Вы можете попробовать этот подход   -  person Iván Nokonoko    schedule 20.02.2020
comment
Я пробовал. Но тот же результат. Он не будет нажимать кнопку. Я предполагаю, что для предотвращения каких-либо инструментов автоматизации эта сеть не позволит любому щелчку, исходящему от любых функций, щелкать теги.   -  person ari fazola    schedule 20.02.2020


Ответы (1)


document.getElementsByClassName(".class") возвращает массив, поэтому array.onclick() не будет работать.

Чтобы вызвать событие html, не только нажмите:

function trigger(elm, type) {
  if (elm) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent(type, true, true);
    elm.dispatchEvent(evt);
  }
}

В вашем случае, я думаю, вы хотите:

trigger(document.querySelector('.class'), 'click')
person Darius    schedule 19.02.2020
comment
Я думаю, что пробовал аналогичный код pastebin.com/VvmK5UXr Я даже добавил третьи параметры для X и Y поз. Но кнопка все равно не нажимается. К вашему сведению, я также пытался нажать кнопку поиска с помощью iMacros. Кнопка была нажата, но она все еще находится на странице поиска, хотя должна была быть на странице результатов. - person ari fazola; 20.02.2020