Вход

Просмотр полной версии : Определение параметра на html странице


Димитрий
30.09.2015, 15:21
Я в ява-скриптинге не силён. Поэтому попросил бы простейший пример бота для игры 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>

Скрин (http://clip2net.com/clip/m95112/d07fc-clip-166kb.jpg)
Буду очень признателен.

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. Даже "окно" не появляется.
Скрин (http://clip2net.com/clip/m95112/e4f87-clip-147kb.jpg)

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();