Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.01.2020, 02:43
Новичок на форуме
Отправить личное сообщение для whitenickkirov Посмотреть профиль Найти все сообщения от whitenickkirov
 
Регистрация: 21.01.2020
Сообщений: 5

Нужна помощь в правке скрипта-кликера для ВК
var i = 1; 
var script; 
var flag = true; 
 
function callbackFunc(result) { 
if (result.response >= 1573106399) { 
if (flag == true) { 
setTimeout (function () { 
flag = false; 
 
document.querySelector("#content > div > div.im-page.js-im-page.im-page_classic.im-page_history-show > div.im-page--history.page_block._im_page_history > div.im-page-history-w > div.im-page--chat-input._im_chat_input_w > div.im-chat-input.clear_fix.im-chat-input_classic._im_chat_input_parent > div.im-chat-input--textarea.fl_l._im_text_input._emoji_field_wrap > div.im-chat-input--txt-wrap._im_text_wrap > button").click(); 
 
}, 530) 
} 
} 
} 
 
function myLoop () { 
setTimeout(function () { 
script = document.createElement('SCRIPT'); 
script.src = "https://api.vk.com/method/utils.getServerTime?&access_token=bca63fbbbca63fbbbca63fbbfbbccafe57bbca6bca63fbbe1d2a790c16613abe7a292dc&v=5.52&callback=callbackFunc"; 
document.getElementsByTagName("head")[0].appendChild(script); 
 
var result; 
if (result !=undefined) { 
callbackFunc(result); 
} 
i++; 
if (i < 10000) { 
myLoop(); 
} 
}, 50) 
} 
if (i < 10000) { 
myLoop(); 
}

Последний раз редактировалось whitenickkirov, 21.01.2020 в 02:58. Причина: Хотел отобразить текст сразу в виде скрипта JS.
Ответить с цитированием
  #2 (permalink)  
Старый 21.01.2020, 02:46
Новичок на форуме
Отправить личное сообщение для whitenickkirov Посмотреть профиль Найти все сообщения от whitenickkirov
 
Регистрация: 21.01.2020
Сообщений: 5

ребята, что не так со скриптом, он нажимает на значок отправки очень большое количество раз и в хроме выскакивает ошибка, которую, нужно закрывать от 7 до 130 раз?
Ответить с цитированием
  #3 (permalink)  
Старый 21.01.2020, 02:51
Новичок на форуме
Отправить личное сообщение для whitenickkirov Посмотреть профиль Найти все сообщения от whitenickkirov
 
Регистрация: 21.01.2020
Сообщений: 5

объясню подробнее, этот скрипт спрашивает каждые 50мс "который час?" у сервера ВК, если время по Юникс-тайм становится больше указанного, то он делает задержку в определенное количество мс (530мс, в данном случае) и отправляет сообщение. помогите,пожалуйста, может быть, у Вас получится мне достойную альтернативу скинуть этому скрипту.
Цель создания: мне нужно отправлять сообщение в определенное время, но так, чтобы оно приходило в беседу ровно в 9:00, причем раньше всех остальных в очереди,которые отправляют вручную. т.е. у меня 9:00, остальные 8:59, либо 9:00, но позже моего сообщение выложено в беседу.
Ответить с цитированием
  #4 (permalink)  
Старый 21.01.2020, 10:37
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от whitenickkirov
этот скрипт спрашивает каждые 50мс "который час?"
И вы реально полагаете, что ВК настолько туп, что не посчитает ваши запросы атакой?
Ответить с цитированием
  #5 (permalink)  
Старый 21.01.2020, 11:08
Новичок на форуме
Отправить личное сообщение для whitenickkirov Посмотреть профиль Найти все сообщения от whitenickkirov
 
Регистрация: 21.01.2020
Сообщений: 5

получается, что ВК действительно туп)))
скрипт работает, когда наступает указанное время, скрипт реально делает задержку в 530мс и отправляет сообщение, только непонятно, для чего он ещё 20раз нажимает на значок записи голосового сообщения. как я понял, он спрашивает время у сервера, сервер говорит, что время больше, чем указанное для отправки, поэтому он вытается отправить его снова и снова, каждые 50мс, как задан таймаут для проверки времени. я пробовал менять сетТаймаут на сетИнтервал, но цикл всё равно некорректный. подскажите, как заставить скрипт кликать всего 1 раз по элементу отправки сообщения? буду признателен, если подскажете, как сделать 100% гарантию прихода сообщения на сервер в указанное время, нужна информация для бесед ВК, а не ЛС. Т.к. для ЛС задержка нужна в 700мс примерно, чтобы пришло в 00секунд, но для бесед, когда все отправляют сообщение к этому времени из 10 человек, моё приходит 3им-4ым.
Ответить с цитированием
  #6 (permalink)  
Старый 21.01.2020, 12:20
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

laimas, whitenickkirov, а почему нельзя только один раз спросить время у ВК, и записать его в константу и уже работать с ним? (Далее, чтобы узнать время по серверу от ВК, вам нужно от текущего локального времени отнять локальное время, когда был получен ответ и прибавить время сервера (локальное время можно получить через Date.now() или performance.now())

Вот, например, так... В объекте tasks можно указать все задачи, которые нужно выполнить в определённое время.
var script = document.createElement("script");
script.src = "https://api.vk.com/method/utils.getServerTime?&access_token=bca63fbbbca63fbbbca63fbbfbbccafe57bbca6bca63fbbe1d2a790c16613abe7a292dc&v=5.52&callback=main";
document.head.appendChild(script);

function main({ response: time }) {
	const startClientTime = performance.now() / 1e3;
	const startServerTime = time;

	(function loop() {
		const serverTime = performance.now() / 1e3 - startClientTime + startServerTime;

		for (const [time, task] of Object.entries(tasks)) {
			if (Number(time) >= startServerTime && serverTime >= Number(time)) {
				delete tasks[time];

				try {
					task(serverTime);
				} catch (error) {
					console.error(error);
				}
			}
		}

		setTimeout(loop, 50);
	})();
}

var tasks = {
	[1579598059 + 0.530]: async currentServerTime => {
		document.querySelector(`
			#content > div > div.im-page.js-im-page.im-page_classic.im-page_history-show
			> div.im-page--history.page_block._im_page_history > div.im-page-history-w
			> div.im-page--chat-input._im_chat_input_w
			> div.im-chat-input.clear_fix.im-chat-input_classic._im_chat_input_parent
			> div.im-chat-input--textarea.fl_l._im_text_input._emoji_field_wrap
			> div.im-chat-input--txt-wrap._im_text_wrap > button
		`).click();
	},
	
	[1579598065]: async currentServerTime => {
		// В этом объекте можно описать однy или несколько задач,
		// которые выполняются один раз по достижении указанного времени
	},
};

Последний раз редактировалось Malleys, 21.01.2020 в 13:58.
Ответить с цитированием
  #7 (permalink)  
Старый 21.01.2020, 13:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от whitenickkirov
получается, что ВК действительно туп
Он как раз умен и ваши эксперименты могут закончится блокировкой вашего домена с его стороны. Чтобы обрабатывать запросы с такой частотой нужно держать соединение открытым, чего для вас ВК делать не станет. А реальную картину бардака и почему браузер недоволен смотрите в сетевой вкладке отладчика.
Ответить с цитированием
  #8 (permalink)  
Старый 21.01.2020, 13:23
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от laimas
Чтобы обрабатывать запросы с такой частотой нужно держать соединение открытым, чего для вас ВК делать не станет.
Так я у вас и спросил, «почему нельзя только один раз спросить время у ВК, и записать его в константу и уже работать с ним?» И даже привёл пример, какие ещё могут быть сомнения? Или что именно вам не понятно в приведённом коде?

whitenickkirov, вот ещё пример...
var script = document.createElement("script");
script.src = "https://api.vk.com/method/utils.getServerTime?&access_token=bca63fbbbca63fbbbca63fbbfbbccafe57bbca6bca63fbbe1d2a790c16613abe7a292dc&v=5.52&callback=main";
document.head.appendChild(script);

function main({ response: time }) {
	const startServerTime = time;

	for (const [time, task] of Object.entries(tasks)) {
		const timeout = Number(time) - startServerTime;
		if(timeout < 0) continue;
		setTimeout(task, 1000 * timeout, Number(time));
	}
}

var tasks = {
	[1579604333 + 0.530]: async currentServerTime => {
		document.querySelector(`
			#content > div > div.im-page.js-im-page.im-page_classic.im-page_history-show
			> div.im-page--history.page_block._im_page_history > div.im-page-history-w
			> div.im-page--chat-input._im_chat_input_w
			> div.im-chat-input.clear_fix.im-chat-input_classic._im_chat_input_parent
			> div.im-chat-input--textarea.fl_l._im_text_input._emoji_field_wrap
			> div.im-chat-input--txt-wrap._im_text_wrap > button
		`).click();
	},
	
	[1579604333]: async currentServerTime => {
		// В этом объекте можно описать одну или несколько задач,
		// которые выполняются один раз по достижении указанного времени
	},
};

Последний раз редактировалось Malleys, 21.01.2020 в 14:00.
Ответить с цитированием
  #9 (permalink)  
Старый 21.01.2020, 14:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Malleys
Так я у вас и спросил, «почему нельзя только один раз спросить время у ВК
А я тут причем? Меня удивляет только одно - валить сервер и браузер запросами и считать это порядком вещей. А ВК мне он и даром не нужен, чего от него хотят мне все равно, предлагайте и объясняйте автору.
Ответить с цитированием
  #10 (permalink)  
Старый 21.01.2020, 14:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Malleys
async currentServerTime
почему async?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в модификации скрипта zonkon Общие вопросы Javascript 15 26.10.2013 09:40
Нужна помощь noob Java lolman Javascript под браузер 18 03.10.2013 11:55
Нужна помощь по слайдеру seoguru Работа 3 28.01.2013 22:02
Нужна помощь с javascript Leslie Оффтопик 0 18.12.2012 01:40
нужна программа для этого. Чем писать? javascript или php? spam-server Серверные языки и технологии 3 27.08.2009 00:52