Обновление 0.9 1. Еще немного доработал код под JQuery 2. Исправил ошибку в мобильной версии, когда при нажатии на трофей анимация его приближения уходила за границы области и обрезался трофей (убрал эту анимацию в мобильной версии) 3. Поменял в скрипте namespace, из за этого нужно удалить и заново установить скрипт, чтобы в дальнейшем он видел обновления Чтобы вы хотели видеть еще в этом скрипте?
Идею взял из предложения onechance : https://zelenka.guru/threads/5638537/ Минусы: Как оказывается можно получить только информация с 1 до 500 страницы в разделе: https://zelenka.guru/threads/5652641/ Что за форум такой, что страницы его нагружают? Установка Ссылка на установку скрипта https://greasyfork.org/ru/scripts/472526-lztrandomthread Ссылка на установку TamperMonkey https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=ru
Можно конечно получать темы по API, но кто то захочет подключать свой токен ? Тогда лимита на 500 не будет и можно будет ебануть сортировку по симпатиям
Фикс. Придется использовать API форума. Токен вставлять в oauth_token. Получает темы даже если больше 500 страниц (function() { function check(){ let currentPage = window.location.href; if (currentPage.startsWith('https://zelenka.guru/forums/')) { let RandomThread = $('.RandomThread'); if (RandomThread.length == 0) { $('.linkGroup').prepend(`<a class="button RandomThread">Случайная тема</a>`); $('.RandomThread').click(function() { let lastPage = $('.PageNav a:last').text(); let lastPageNumber = parseInt(lastPage); let randomNum = Math.floor(Math.random() * lastPageNumber) + 1; let forumID = $('form.DiscussionListOptions').attr('action'); if (lastPage.length > 0) { XenForo.ajax(`https://zelenka.guru/${forumID}page-${randomNum}`, {}).then(data => { infoPage = data.templateHtml; let parser = new DOMParser(); infoPage = parser.parseFromString(infoPage, 'text/html'); let threadIds = $(infoPage).find("[id^='thread-']").toArray(); let threads = []; threadIds.forEach(function(threadId) { let thread = threadId.id.match(/\d+/)[0]; threads.push(thread); }); let randomThreadId = threads[Math.floor(Math.random() * threads.length)]; window.location.href = "https://zelenka.guru/threads/" + randomThreadId; }); } else { const url = new URL('https://api.zelenka.guru/threads'); const params = { page: page, forum_id: forumID, oauth_token: 'ВАШ API TOKEN ZELENKA.GURU' }; Object.keys(params).forEach(key => url.searchParams.append(key, params[key])); fetch(url) .then(response => response.json()) .then(data => { const threads = data.threads; const randomIndex = Math.floor(Math.random() * threads.length); const randomThread = threads[randomIndex]; const threadId = randomThread.thread_id; window.location.href = "https://zelenka.guru/threads/" + threadId; }); }; }); }; }; requestAnimationFrame(check); }; requestAnimationFrame(check); })(); JS (function() { function check(){ let currentPage = window.location.href; if (currentPage.startsWith('https://zelenka.guru/forums/')) { let RandomThread = $('.RandomThread'); if (RandomThread.length == 0) { $('.linkGroup').prepend(`<a class="button RandomThread">Случайная тема</a>`); $('.RandomThread').click(function() { let lastPage = $('.PageNav a:last').text(); let lastPageNumber = parseInt(lastPage); let randomNum = Math.floor(Math.random() * lastPageNumber) + 1; let forumID = $('form.DiscussionListOptions').attr('action'); if (lastPage.length > 0) { XenForo.ajax(`https://zelenka.guru/${forumID}page-${randomNum}`, {}).then(data => { infoPage = data.templateHtml; let parser = new DOMParser(); infoPage = parser.parseFromString(infoPage, 'text/html'); let threadIds = $(infoPage).find("[id^='thread-']").toArray(); let threads = []; threadIds.forEach(function(threadId) { let thread = threadId.id.match(/\d+/)[0]; threads.push(thread); }); let randomThreadId = threads[Math.floor(Math.random() * threads.length)]; window.location.href = "https://zelenka.guru/threads/" + randomThreadId; }); } else { const url = new URL('https://api.zelenka.guru/threads'); const params = { page: page, forum_id: forumID, oauth_token: 'ВАШ API TOKEN ZELENKA.GURU' }; Object.keys(params).forEach(key => url.searchParams.append(key, params[key])); fetch(url) .then(response => response.json()) .then(data => { const threads = data.threads; const randomIndex = Math.floor(Math.random() * threads.length); const randomThread = threads[randomIndex]; const threadId = randomThread.thread_id; window.location.href = "https://zelenka.guru/threads/" + threadId; }); }; }); }; }; requestAnimationFrame(check); }; requestAnimationFrame(check); })();
Меню с выбором чекбокса, для включения фильтрации Сброс списка, где хранятся просмотренные товары По просьбе Jelby и других пользователей форума Скрипт был написан на скорую руку и как будет достаточно времени сделаю все культурнее. О всех найденных багах писать сюда. Установка Ссылка на установку скрипта - https://greasyfork.org/ru/scripts/472845-hideviewedmarket Ссылка на установку TamperMonkey - https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=ru P.S. У меня нет тех возможностей, что есть у разработчика форума. Поэтому скрипт скрывает товары лишь удалив их блок с кода страницы. Поэтому на какое-то время будет видны элементы, пока страница не прогрузится