Рутинная автоматизация
Есть задача, которую уже некоторое время хотелось бы решить, но никак руки не доходили, да и знаний в этой области практически нет.
Суть задачи такая: есть сайт (сторонний) "тыкалка". На странице имеется кнопка (изображение) со ссылкой вида pokeliga.com/entlink/adopts/xp_share.php?player=id_игрока. id_игрока числовое значение в интервале скажем от 1 до 8999. Кнопка может иметь 2 состояния - used и available. В случае если кнопка в состоянии used (была нажата или нет доступных), то ее не нажать, поэтому нужно ее пропустить и искать состояние available. Открывать в браузере 8999 вкладок это жесть, но можно ли как то автоматизировать все это дело в цикле, в котором происходит переход по ссылке, с последующим нажатием нужной кнопки на странице. Если это дело возможно, хотелось бы узнать в каком направлении стоит двигаться, какие данные могут понадобиться для такой реализации. В идеале помог бы простенький пример. |
можно, юзерскриптом перебрать минут за 5.
|
Спасибо, пошел смотреть материалы по этой теме
|
если в конечном итоге вся задача сводится к отправке 8999 аяксовых запросов со страницы, то скрипт можно написать в блокноте и выполнить в консольке
|
На каждой странице будет производиться один запрос, страниц всего 8999
|
Для этого подойдет document.location
|
В коде в качестве кнопки выступает изображение со ссылкой. Как у нее вызвать событие onclick()
|
document.querySelector("селектор изображения").click(); |
Почти получилось. Но проблема с циклом.
var id; var url = "http://pokeliga.com/entlink/adopts/xp_share.php?player=" for (id = 1; id <= 10; id++) { document.location.href = url+id; var used = document.getElementsByClassName("xp_share available"); if(used.length > 0){ var elements = document.querySelectorAll(".xp_share img"); var src = elements[0].click(); } else { break; } } Скрипт не идет дальше первой страницы и постоянно обновляется. Какие будут советы на этот счет? |
И не пойдет.
нужно получить текущий URL отрезать от него концовку прибавить к ней единицу и перейти по этому адресу. |
заходим на http://pokeliga.com/entlink/adopts/x...e.php?player=1
и вроде все должно заиграть var id = document.location.search.split('player=')[1]; id++; if (id<9000){ if (document.getElementsByClassName("xp_share available").length) document.querySelector(".xp_share img").click(); document.location.href = "http://pokeliga.com/entlink/adopts/xp_share.php?player="+id; } else alert('Конец'); |
Ок, убрал цикл и изменил скрипт к виду:
var mi = location.href.split(/(\d+)/); var no = mi.length - 2; var os = mi[no]; mi[no]++; if ((mi[no] + '').length < os.length) mi[no] = os.match(/0+/) + mi[no]; location.href = mi.join(''); var used = document.getElementsByClassName("xp_share available"); if(used.length > 0){ var elements = document.querySelectorAll(".xp_share img"); var src = elements[0].click(); } Осталось решить последний вопрос. Судя по коду, скрипт будет выполняться бесконечно. Как его остановить на странице 8999, ну или в принципе любой заданной? |
Спасибо:victory: Не заметил ответ ранее :)
|
Часовой пояс GMT +3, время: 10:13. |