Я собираюсь быть здесь максимально подробным, поскольку я столкнулся с несколькими решениями, которые в конечном итоге не сработали. Пожалуйста, имейте в виду, что я не знаю Javascript. Я знаю базовые HTML и CSS. У меня нет реального опыта программирования, но я пытаюсь учиться понемногу, исследуя базовые задачи, подобные этой. Пожалуйста, поговори со мной, как будто я идиот. Любой жаргон, который я использую в этом посте, я выучил, исследуя эту конкретную проблему. Я пишу этот пользовательский скрипт как личный проект и делюсь им с друзьями.
Что я пытаюсь сделать.
Я пытаюсь написать пользовательский скрипт для Chrome/Greasemonkey (Chrome — мой целевой браузер), который будет нажимать кнопку Обновить в браузере сервера Battlefield 3. Для тех из вас, кто не знает, Battlefield 3 использует веб-сайт в паре с подключаемым модулем браузера для VOIP и фактически запускает игру через серверный браузер. Большая часть этого выглядит как довольно прямолинейный HTML, организованный в виде таблиц.
Идея состоит в том, что при просмотре главной страницы заполненного сервера скрипт будет нажимать кнопку Обновить каждые три секунды или около того, пока страница не сообщит об открытом месте на сервере, а затем остановит обновление. цикл и нажмите кнопку присоединиться к серверу. У меня уже есть работающая часть скрипта, которая опрашивает сервера о текущих и максимальных игроках, а затем назначает их своим собственным переменным.
На данный момент я пытаюсь заставить щелчок работать в консоли, чтобы я мог использовать его в своем сценарии, и мне не повезло.
Код, которым я пытаюсь манипулировать.
Это div для кнопки, которую я пытаюсь нажать, извлеченной из инструментов разработчика Chrome:
<div class="serverguide-header-refresh-button alternate show">
<div type="reset" class="common-button-medium-grey">
<p style="position: relative;">
<a href="/bf3/servers/show/c7088bdc-2806-4758-bf93-2106792b34d8/">Refresh </a>
</p>
</div>
</div>
(Эта ссылка не статическая. Это ссылка на определенную страницу сервера)
Что я пробовал.
Чтобы найти кнопку, я использую getElementsByClassName
. У него нет уникального идентификатора, но класс уникален для этого элемента на этой конкретной странице, поэтому getElementsByClassName("serverguide-header-refresh-button")[0]
каждый раз извлекает правильный div. Проблема заключается в том, чтобы скрипт выполнял любое фактическое действие на кнопке.
document.getElementsByClassName("serverguide-header-refresh-button")[0].click();
Теперь я понимаю, что это не сработало, потому что это не обычная кнопка отправки. Я не понимаю особенностей стандарта здесь, но я понимаю, что он не поддерживает метод .click()
.
function addJQuery(callback) {
var script = document.createElement("script");
script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
script.addEventListener('load', function() {
var script = document.createElement("script");
script.textContent = "(" + callback.toString() + ")();";
document.body.appendChild(script);
}, false);
document.body.appendChild(script);
}
// the guts of this userscript
function main() {
unsafeWindow.jQuery('.serverguide-header-refresh-button')[0].click();
}
// load jQuery and execute the main function
addJQuery(main);
Это просто unsafeWindow.jQuery('.serverguide-header-refresh-button').click();
завернутый в некоторый код для загрузки jQuery для пользовательских скриптов. Это было немного, что я подобрал в другом месте, но мне сказали, что это будет работать, только если на странице загружен jQuery. Я подумал, что стоит попробовать. Это один из тех снимков, понятия не имею, что делаю в темноте, и он не сработал. Я попробовал то же самое ниже с другим фрагментом кода jQuery, который я подобрал:
function addJQuery(callback) {
var script = document.createElement("script");
script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
script.addEventListener('load', function() {
var script = document.createElement("script");
script.textContent = "(" + callback.toString() + ")();";
document.body.appendChild(script);
}, false);
document.body.appendChild(script);
}
// the guts of this userscript
function main() {
var evObj = document.createEvent('Events');
evObj.initEvent("click", true, false);
document.getElementsByClassName('serverguide-header-refresh-button')[0].dispatchEvent(evObj);
}
// load jQuery and execute the main function
addJQuery(main);
Оба они возвращают Undefined в консолях Chrome и Firebug.
Итак, кто-нибудь будет так любезен, чтобы помочь мне создать немного кода для этого скрипта, чтобы нажимать кнопку «Обновить» на этой странице?