• Как имитировать ввод сообщения в WhatsApp Web?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Написал функцию для эмуляции ввода сообщения в WhatsApp Web:
    // Вызываем функцию для набора текста и отправки:
    
    textEnter('Проверка события ввода сообщения в мессенджере WhatsApp. Смотрим, отсылается ли информация о том, что собеседник в данный момент печатает сообщение.');
    
    // Функция для имитации ввода сообщения и его отправки:
    
    function textEnter(text) {
    	
    	var array = text.split(''); // Разбиваем текст по символам в массив
    	
    	// Ищем поле вввода сообщения и записываем ссылку на него в переменную:
    	
    	var div = document.querySelector('div#main div[contenteditable="true"]');
    	
    	div.focus(); // Передаём фокус на поле ввода
    	
    	// Запускаем эмулятор посимвольного ввода:
    	
    	var emulator = setInterval(function() {
    		
    		// Пока есть символы в сообщени:
    		
    		if (array.length > 0) {
    			
    			// Вводим символ:
    			var symbol = array.shift();
    			div.innerHTML = div.innerHTML + symbol;
    			
    			// Передаём клавиатурные события отвечающие за ввод:
    			div.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true }));
    			div.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true }));
    			div.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true }));
    			div.dispatchEvent(new InputEvent('input', { bubbles: true }));
    			
    		}
    		
    		// Если все символы введены:
    		
    		else {
    			
    			clearInterval(emulator); // Отключаем эмулятор ввода
    			
    			// Ищем и жмем кнопку отправки сообщения собеседнику:
    			document.querySelector('span[data-icon="send"]').click();
    			
    		}
    		
    	}, 100);
    
    }

    Наверняка многим пригодится. Спасибо Mikhail Osher за наводку на правильный алгоритм действий)
    Ответ написан
    Комментировать
  • Как получить страничку сервера подождав (обойти) CloudFlare Checking if the site connection is secure?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Я обычно в таких случаях использую самописное браузерное расширение, которое раз N минут / часов получает валидные куки и отсылает их на мой сервер, а там на сервере используя эти куки можно свободно парсить данные.
    Ответ написан
    Комментировать
  • Как открыть диалог в WhatsApp Web при помощи JavaScript?

    zkrvndm
    @zkrvndm Автор вопроса
    Архитектор решений
    Нашел на иностранном сайте, как симулировать клики на React. Ниже пример, который подходит и для WhatsApp:
    const mouseClickEvents = ['mousedown', 'click', 'mouseup'];
    
    function simulateMouseClick(element){
      mouseClickEvents.forEach(mouseEventType =>
        element.dispatchEvent(
          new MouseEvent(mouseEventType, {
              view: window,
              bubbles: true,
              cancelable: true,
              buttons: 1
          })
        )
      );
    }
    
    // Ищем диалог по номеру телефона:
    var element = document.querySelector('span[title="+7 905 837-96-43"]');
    simulateMouseClick(element); // Симулируем событие клика

    Данный способ оказался рабочим, можно использовать. В целом оказалось достаточно одного события mousedown:
    // Ищем диалог с по номеру телефона:
    dialog = document.querySelector('span[title="+7 905 837-96-43"]');
    
    // Вызываем событие mousedown на найденном элементе:
    dialog.dispatchEvent(
      new MouseEvent('mousedown', {
          bubbles: true
      })
    );

    При этом bubbles является параметром обязательным, без него не работает.
    Ответ написан
    Комментировать