Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Скриптом в tampermonkey для сайта (https://javascript.ru/forum/dom-window/82852-skriptom-v-tampermonkey-dlya-sajjta.html)

Runizag 18.07.2021 07:25

Скриптом в tampermonkey для сайта
 
Здравствуйте форумчане ,так как я в программирование не особо силен , нужна помощь чтобы сделать скрипт .
Суть скрипта обновить страницу в нужный момент , написать в форме поиска вписать заданный мой текст ,нажать кнопку найти ,затем что вышло в поиске нажать кнопку выбора .Сложно ли сделать такой скрипт?

Runizag 18.07.2021 07:55

нашел способ как обновить страницу в заданное время function refreshAt(hours, minutes, seconds) {
var now = new Date();
var then = new Date();

if(now.getHours() > hours ||
(now.getHours() == hours && now.getMinutes() > minutes) ||
now.getHours() == hours && now.getMinutes() == minutes && now.getSeconds() >= seconds) {
then.setDate(now.getDate() + 1);
}
then.setHours(hours);
then.setMinutes(minutes);
then.setSeconds(seconds);

var timeout = (then.getTime() - now.getTime());
setTimeout(function() { window.location.reload(true); }, timeout);
}

Теперь нужно сделать чтобы писался заданный текст в форму и нажималось найти Выглядет как то так

Rise 18.07.2021 09:15

Цитата:

Сообщение от Runizag
Сложно ли сделать такой скрипт?

Зависит от сайта.

Runizag 18.07.2021 09:22

Цитата:

Сообщение от Rise (Сообщение 538753)
Зависит от сайта.

В общем надо чтобы написался заданный мной текст в скрипте в поле "введите название организации "и нажалась кнопка войти
Скриншот прикреплён выше

Rise 18.07.2021 09:40

Цитата:

Сообщение от Runizag
Скриншот прикреплён выше

А это где?
Цитата:

Сообщение от Runizag
затем что вышло в поиске нажать кнопку выбора


Runizag 18.07.2021 09:50

2-ое сообщение от меня
Цитата:

Сообщение от Rise (Сообщение 538755)
А это где?

[quote=Runizag;538751]нашел способ как обновить страницу в заданное время function refreshAt(hours, minutes, seconds) {
var now = new Date();
var then = new Date();

if(now.getHours() > hours ||
(now.getHours() == hours && now.getMinutes() > minutes) ||
now.getHours() == hours && now.getMinutes() == minutes && now.getSeconds() >= seconds) {
then.setDate(now.getDate() + 1);
}
then.setHours(hours);
then.setMinutes(minutes);
then.setSeconds(seconds);

var timeout = (then.getTime() - now.getTime());
setTimeout(function() { window.location.reload(true); }, timeout);
}

Теперь нужно сделать чтобы писался заданный текст в форму и нажималось найти Выглядет как то так

Rise 18.07.2021 10:16

Runizag, результаты поиска и их кнопка выбора где в скриншоте?

Runizag 18.07.2021 11:14

Цитата:

Сообщение от Rise (Сообщение 538757)
Runizag, результаты поиска и их кнопка выбора где в скриншоте?

вот снизу результат поиска если я пишу 91

Rise 18.07.2021 12:26

Runizag, сайт не публичный что-ли?

Runizag 18.07.2021 13:13

Цитата:

Сообщение от Rise (Сообщение 538760)
Runizag, сайт не публичный что-ли?

Не особо ,для входа нужны данные специальные

Runizag 18.07.2021 17:57

судя по всему ни кто не поможет

Rise 20.07.2021 16:56

Runizag,
(async () => {
    const values = [
        //hh:mm:ss   text
        ['10:20:00', '12'],
        ['20:30:00', '34'],
    ];

    const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

    while (true) {
        const date1 = new Date();
        const time1 = date1.toLocaleTimeString('ru');
        const value = values.find(value => value[0] > time1);

        if (!value) break;

        const date2 = new Date(Number(date1));
        date2.setHours(...value[0].split(':'), 0);

        await delay(date2 - date1);

        const textInput = document.querySelector('#g-search input[type=text]');
        textInput.value = value[1];

        const findButton = document.querySelector('#g-search button[type=button]');
        findButton.click();

        await delay(5000);

        const selectButton = document.querySelector('selector?');
        if (selectButton) selectButton.click();
    }
})();

Runizag 21.07.2021 09:41

Цитата:

Сообщение от Rise (Сообщение 538814)
Runizag,
(async () => {
    const values = [
        //hh:mm:ss   text
        ['10:20:00', '12'],
        ['20:30:00', '34'],
    ];

    const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

    while (true) {
        const date1 = new Date();
        const time1 = date1.toLocaleTimeString('ru');
        const value = values.find(value => value[0] > time1);

        if (!value) break;

        const date2 = new Date(Number(date1));
        date2.setHours(...value[0].split(':'), 0);

        await delay(date2 - date1);

        const textInput = document.querySelector('#g-search input[type=text]');
        textInput.value = value[1];

        const findButton = document.querySelector('#g-search button[type=button]');
        findButton.click();

        await delay(5000);

        const selectButton = document.querySelector('selector?');
        if (selectButton) selectButton.click();
    }
})();

То ли я не еду, то ли барашки не идут =) Что то ничего не происходит

Runizag 21.07.2021 09:47

вот видео как должно работать , т.е сайт должен обновиться в заданное время + написать в поле заданный мной текст и нажать кнопку на
йти

Rise 21.07.2021 11:26

Runizag, во-первых, не показан код кнопки Выбрать группу, во-вторых, не показано что после клика по ней происходит, в-третьих, не надо цитировать полностью мои посты есть Цитата выделенного или просто кликнуть по моему нику.

Runizag 21.07.2021 11:41

Rise,
А извиняюсь я просто не знал ,не давно нахожусь на этом форуме, я думал не обязательно знать что находиться дальше, мне же по идее текст в формочку надо намечать и нажать найти,но если надо ,то вот ,вот что происходит дальше

Runizag 21.07.2021 11:46

Rise,

вот еще видео
хэш бесполезно писать , он генерируется каждый раз по разному,но value где reserveform[gardenid] у всех постоянный ,он не меняется

Rise 21.07.2021 11:54

Цитата:

Сообщение от Runizag
я думал не обязательно знать что находиться дальше

В смысле не обязательно? А это уже не нужно что-ли:
Цитата:

Сообщение от Runizag
затем что вышло в поиске нажать кнопку выбора


Также неизвестно, может ли быть в поиске несколько результатов, если да, то выбрать все или только первый. Или по вашему это тоже не обязательно знать?

Цитата:

Сообщение от Runizag
вот еще видео

Доступ закрыт.

Цитата:

Сообщение от Runizag
хэш бесполезно писать

Да причем здесь хэши всякие, нужен селектор кнопки и всё, логику включите.

Runizag 21.07.2021 12:12

Rise,
Ссылки открыл проверьте еще раз, да конечно нужно знать, что нужно выбрать только первый

Rise 21.07.2021 12:31

Runizag, так Получить направление тоже надо кликать? И это страница с другим адресом?

Runizag 21.07.2021 12:47

Rise,
нет, ее не нужно нажимать ,в общем сайт выдает направление в ровно 7 часов утра, иногда чуть раньше иногда чуть позже ,для этого нужно ,обновить сайт ,после чего появиться группы, т.к появляется групп очень много нужно воспользоваться поиском , и нужно нажать выбрать группу потом , в общем как то так, . Просто для того чтобы это все появилось нужно залогиниться на сайте через паспортные данные, по этому не получиться просто так дать ссылку на сайт. Но если есть такая возможность то можно и нажать кнопку получить направление ,выглядит как то так

Rise 21.07.2021 13:33

Runizag, tampermonkey это userscripts, userscript работает с открытой страницей, если страницы разные, то реализовать скрипт будет сложнее. Если поиск на странице X, выбрать - на странице Y, направление - на странице Z, это три разные страницы.

Runizag 21.07.2021 14:12

Rise,
да мне хотя бы чтобы выбор группы был ,а последнюю кнопку "получить направления " я сам смогу нажать ,но так название сайта/ru/reserv/get/organization(тут осуществляется поиск и выбор группы) потом после выбора группы идет названиесайта/ru/reserv/get/organization/group (тут находиться сами направления ) ,но брать мне их не обязательно

Rise 21.07.2021 14:20

Цитата:

Сообщение от Runizag
"получить направления " я сам смогу нажать

Думаете они вас будут ждать, то что вы страницу группы откроете, не значит что группа за вами зарезервирована станет, а вы вечером придете и сами нажмете, а иначе какой смысл вообще в скрипте, если вы можете сами нажать с утра.

Runizag 21.07.2021 14:30

Rise,
Проблема в секундах ,все эти направления забирают за секунды ,если ускорить процесс хотя бы на нажатие пару кнопок то процесс существенно ускориться ,просто я думал что это реализовать будет не тяжело ,но я понимаю что переход на другую страницу будет проблемно реализовать , до этого у меня был вот такой скрипт
я просто вбивал нужное мне время в скрипте , а дальше вбивал в поиске нужную цифру нажимал найти и нажимал выбрать группу, а хотелось бы сократить действия так чтобы , я вбил нужное время и нужную группу ,а кнопку получить направления я брал сам уже

Rise 21.07.2021 14:56

Цитата:

Сообщение от Runizag
до этого у меня был вот такой скрипт

А чем это отличается от просто открыть/перезагрузить сайт в 08:00:04? Перезагрузку сайта скрипт не ускоряет, ее ускоряет бОльшая скорость интернета.

Runizag 21.07.2021 15:13

Rise,
вводом текста ускоряет ,большая скорость интернета не ускорит ,это уже проверено , мне просто нужно ввести нужны мне текст и нажалась кнопка найти и выбор группы ,все больше ничего не надо ,я знаю что это очень сильно ускорит взятие направление ,просто нужно чтобы скрипт сделал за меня 4 действия обновил ,ввел текст ,нажал найти ,и выбрал группу ,если возможно сделать без ввода текста а просто по айди названия ,то было бы вообще лучше . Типо что то нажимал выбрать группу по value ,потому что value каждой организации мне известен всегда

Runizag 21.07.2021 15:15

Rise,
Если есть возможность могу в дискорде наглядно все показать и объяснить что и как там работает и что и как мне надо

Rise 21.07.2021 15:22

Цитата:

Сообщение от Runizag
а просто по айди названия

А если групп много и они разбиты на пагинацию, по 25 штук допустим? Тем более value равно 10068, а группа 91, где логика?

Runizag 21.07.2021 15:41

Rise,
у каждого названия есть свой типа айди вот к примеру у него 10068 у других он другой ,но всегда он один и цифра это не его порядковый номер ,а просто айди ,если сверху на сайте нажмете "Дошкольные организации" ,то там всех их названия будут и айди если перейдете по ссылке

Rise 21.07.2021 16:02

Runizag, ну и что, вы же ищете не по этому айди, а по номеру группы, или вы теперь будете вместо 91 в поле 10068 вводить?

Runizag 21.07.2021 16:05

Rise,
это я просто так для информации написал ,может она пригодится ,а так да я по названию заведения ищу

Rise 21.07.2021 16:11

Runizag,
(async () => {
    const hours = 8, minutes = 0, seconds = 0, group = 91;

    const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

    if (sessionStorage.reload == 'yes') {
        sessionStorage.reload = 'no';

        await delay(4000); // Ожидание до загрузки данных (миллисекунды)

        const textInput = document.querySelector('#g-search #name-block input[type=text]');
        textInput.value = group;

        const findButton = document.querySelector('#g-search button[type=button]');
        findButton.click();

        await delay(2000); // Ожидание до результата поиска

        const selectButton = document.querySelector('[class*=g-list-item]:not([style*=none]) button[type=submit]');
        if (selectButton) selectButton.click();

    } else {
        await delay(new Date().setHours(hours, minutes, seconds, 0) - new Date()); // Ожидание до перезагрузки
        sessionStorage.reload = 'yes';
        location.reload();
    }
})();


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