Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Определение параметра на html странице (https://javascript.ru/forum/css-html-browser/58596-opredelenie-parametra-na-html-stranice.html)

Димитрий 30.09.2015 15:21

Определение параметра на html странице
 
Я в ява-скриптинге не силён. Поэтому попросил бы простейший пример бота для игры http://godville.net/superhero
Чтобы, когда мало здоровья - нажималась кнопка(если есть) "сделать хорошо".

Я так понимаю алгоритм:
1) Ищем здоровье текущее и здоровье максимальное.
2)Если текущее меньше максимального на 10%(например), то происходит нажатие на "лечение"

Хоть подскажите от чего отталкиваться?
Здоровье в html выглядит так:
Код:

<div class="l_val">267 / 368</div>
Ссылка на лечение проста:
Код:

<a href="#" class="no_link div_link enc_link" title="Одарить героя благодатью
 и сделать ему что-то хорошее">Сделать хорошо</a>

Скрин
Буду очень признателен.

Lemme 30.09.2015 16:18

Как то так, но клика не будет, если подобных ссылок несколько, а нужная стоит не первой в DOM. Вернее, клик то произойдет, но куда,...

var link = document.querySelector('.no_link.div_link.enc_link');
    
setInterval(function() {
    var hp = document.querySelector('.l_val').innerHTML.match(/\d+/g);
	if (hp[1] <= hp[2] - hp[2] / 100 * 10) {
		link.click();
    }
}, 100);


p.s не тестил.

sanmihan 30.09.2015 16:35

Lemme, можно и без регулярки
и да там элементов с классом l_val выше крыши
var link = document.querySelector('#actions .enc_link');
     
setInterval(function() {
    var hp = document.querySelector('#hk_health .l_val').innerHTML.split(" / ");
    if ( hp[0] / hp[1] * 100 <= 10) {
        link.click();
    }
}, 3000);

Lemme 30.09.2015 16:40

sanmihan, можно =)

Димитрий 30.09.2015 16:59

Что-то не получается... Как этот скрипт запустить? Пытаюсь запустить с помощью расширения - толку 0. Даже "окно" не появляется.
Скрин

var link = document.querySelector('#actions .enc_link');
    var hp = document.querySelector('#hk_health .l_val').innerHTML.split(" / ");
    alert( hp[1] );

setInterval(function() {
    var hp = document.querySelector('#hk_health .l_val').innerHTML.split(" / ");
    alert( hp );
    if (hp[1] <= hp[2] - hp[2] / 100 * 10) {
        link.click();
    }
}, 100);

Lemme 30.09.2015 17:07

Димитрий, в консоль.

devote 30.09.2015 17:13

Цитата:

Сообщение от Димитрий
Что-то не получается...

замени hp[1] на hp[0], а hp[2] на hp[1]

Димитрий 30.09.2015 17:15

Также ошибки выводит:
Uncaught SyntaxError: Unexpected token var
at Object.InjectedScript._evaluateOn (<anonymous>:904:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:837:34)
at Object.InjectedScript.evaluate (<anonymous>:693:21)

Димитрий 30.09.2015 17:30

Изначально нашел скрипт, делающий задуманное. Но хотел от мишуры избавиться - всплыющего окна для настройки. Плюс здоровье определял неправильно.

var godville = {
    delay: 3000,
    init: function() {
        $('body').append('<aside id="autobot">');
        $('#autobot').append('<p>Select an option from below to start botting</p>');
        $('#autobot').append('<input type="radio" id="auto_encourage" name="autobot"><label for="auto_encourage">Automatically encourage</label>');
        $('#autobot').append('<input type="radio" id="auto_punish" name="autobot"><label for="auto_punish">Automatically punish</label>');
        $('#autobot').append('<button>Stop autoing</button>');
        $('#autobot').css({
            background: 'rgba(255,255,255,.45)',
            width: '330px',
            padding: '15px 0 15px 20px',
            border: '1px solid #CCC',
            'border-radius': '10px',
            'box-sizing': 'border-box',
            'font-size': '12px',
            position: 'absolute',
            top: '40px',
            right: '10px'
        });
        $('#autobot input[type="radio"],#autobot label').css({float: 'left', margin: '3px 0'});
        $('#autobot input[type="radio"]').css({clear: 'left', 'margin-right': '5px'}).change(function() {
            var selection = $(this).prop('id');
            if(godville.interval) godville.stop(true);
            godville.run(selection);
        });
        $('#autobot button').hide().css({margin: '15px 0 0', float: 'left', clear: 'both'}).click(godville.stop);
    },
    interval: '',
    run: function(selection) {
        var godpower = Number($('.gp_val').text().replace(/%/,'')),
        action;
        if(selection === 'auto_punish') {
            action = $('.enc_link');
        } else {
            action = $('.pun_link');
        }
        godville.interval = setInterval(function() {
            if(godpower > 25) {
                action.click();
            } else {
                $('#autobot p').html('You don\'t have enough Godpower.<br>Checking again in '+ (godville.delay / 1000) +' seconds.');
            }
        },godville.delay);
        $('#autobot button').show();
    },
    stop: function(instant) {
        if(godville.interval) {
            clearInterval(godville.interval);
            godville.interval = '';
        }
        if(!instant) {
            $('#autobot p').empty().text('Bot has been stopped.').css('color','red');
            setTimeout(function() {
                $('#autobot p').fadeOut(1000,function() {
                    $(this).text('Select an option from below to start botting').css('color','#555').show();
                });
            },5000);
            $('#autobot input[type="radio"]').prop('checked',false);
            $('#autobot button').hide();
        }
    }
};
godville.init();


Часовой пояс GMT +3, время: 06:56.