2017-02-22 19 views
-1

Я работаю над ботом (бот - это в значительной степени программа, которая делает что-то само собой) для веб-игры под названием 2048, но я не могу автоматизировать ключ Нажатие на расширение Chrome. он настроен, и он работает JQuery, но даже если я нашел других людей, спрашивающих об этом, он все равно не работает! кто-нибудь знает почему?Cant Automate Key Нажатие на JavaScript или JQuery для расширения Chrome

Это код для файла JS во фрагменте. Это только JS-файл, который я показываю вам, потому что это основной скрипт для расширения chrome (кроме manifest.js). так что не ожидайте, что это сработает! :

//2048 Bot By BukkitmanMC 
 

 
//Before We begin, we Need to Modify the Document Page Before we can Start! 
 

 
document.getElementsByClassName("restart-button")[0].innerHTML = "Start Bot" 
 
var startedBot = false 
 

 

 
function Bot() { 
 
    //Initialising Brain 
 

 
    var Game = { 
 
     KeyCode: { //These Are the WASD Keys cause with JQuery, I don't think you can use the arrow Keys 
 
      Up: 119, 
 
      Down: 115, 
 
      Left: 97, 
 
      Right: 100, 
 
     }, 
 
     Map: [[0, 0, 0, 0], 
 
       [0, 0, 0, 0], 
 
       [0, 0, 0, 0], 
 
       [0, 0, 0, 0] 
 
     ] 
 
    }; 
 
    
 
    //This is Where the Thinking Starts 
 
    var e = $.Event('keypress'); 
 
    e.keyCode = Game.KeyCode.Up; // Character 'W' 
 
    $("body").trigger(e); 
 
    console.log("Up Key Pressed") 
 

 
    setTimeout(Bot, 500) 
 
}; 
 

 
document.getElementsByClassName('restart-button')[0].onclick = function() { 
 
    console.log("Bot Has Started Playing! Now you Just Need to Watch!") 
 
    Bot() 
 
};

Если вы поняли это, и вы отправили это уже, спасибо!

+0

Для ответа на ваш вопрос требуется информация, которая не включена в ваш вопрос. Нам нужно будет исследовать код для неуказанного веб-сайта, чтобы узнать, что необходимо для принятия события «keypress». Такой код должен быть в вопросе. Вам нужно будет провести расследование своего кода, чтобы узнать, какой элемент (ы) необходимо настроить для события. Вам также нужно будет проверить, проверяют ли они, было ли событие ['isTrusted'] (https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted) – Makyen

+0

Mayken, я делаю не понимаю, что вы имеете в виду. Можете ли вы объяснить это проще для меня? На самом деле я этого не понимаю. –

+0

Чтобы решить вашу проблему, нам нужен код для веб-сайта, с которым он должен работать. Веб-сайт будет ожидать одно или несколько событий по конкретным элементам. Без этой информации мы ** не можем ** помочь вам за пределами горячего - в общем случае отправить событие. Кроме того, существует свойство событий 'isTrusted', которое специально предназначено для того, чтобы позволить прослушивателю событий различать события * фактически *, созданные пользователем, и события, генерируемые скриптами. Веб-страница может или не может проверить это свойство (код потребности). Я ничего не видел, поскольку расширения Chrome могут отправлять «доверенные» события. – Makyen

ответ

1

Я создал быструю скрипку, где вы можете увидеть, что с помощью Jquery работы:

$(function(){ 
    var Game = { 
     KeyCode: { 
      Up: 119, 
      Down: 115, 
      Left: 97, 
      Right: 100, 
     }, 
     Map: [[0, 0, 0, 0], 
       [0, 0, 0, 0], 
       [0, 0, 0, 0], 
       [0, 0, 0, 0] 
     ] 
    }; 
    $("body").keypress(function(e) 
    { 
     $("#log").append("key pressed : " + e.which + "<br>") 
    }); 
    function repeat(){ 
     var e = $.Event('keypress'); 
     e.keyCode = Game.KeyCode.Up; 
     e.which = Game.KeyCode.Up; 
     $("body").trigger(e); 
    } 

    setInterval(repeat,500); 
}) 

https://jsfiddle.net/yjL2aL9y/

Я сделал несколько изменений, хотя:

  • Encapsulate код в $ (функция() {})
  • Установить «какой» объект на мероприятии

В зависимости от того, как выполняется прослушиватель клавиатуры в игре, возможно, что слушатель находится на определенном элементе DOM, а не «body», а также что он использует «stopPropagation» для предотвращения пузырения.

+0

Это более полезно, но я хочу, чтобы вся функция повторяла свое «я». вы знаете, как это исправить? –

+0

Он уже повторяется с setInterval (повтор, 500). Вы можете видеть на jsfiddle, что журнал продолжает происходить – Yoann

+0

, что я не имею в виду. Я хотел сказать, что хочу, чтобы вся функция с переменной «Игра» полностью повторяла свою самооценку –