• Я бы хотел зашифровать системный диск, как я могу это сделать?

    @zkrvndm
    Софт для автоматизации
    Большинство дистрибутивов при установке имеют опцию шифрования диска, просто воспользуйтесь этой опцией на этапе установки.
    Ответ написан
    1 комментарий
  • Как спарсить сайт с последующим переводом на другой язык?

    @zkrvndm
    Софт для автоматизации
    Используйте виджет:
    https://translate.yandex.ru/developers/website-widget

    Алгоритм действий следующий:
    1. Получайте html-код целевой страницы при помощи file_get_contents()
    2. Внутрь полученного html перед закрывающим тегом body вставляйте JavaScript-код виджета
    3. Затем выводите результат в браузер пользователя при помощи echo

    P. S. Это в корне не правильный, но наиболее простой способ переводить страницы на лету. Если делать все по уму, нужно поднимать ревер-прокси и переводит тексты на стороне сервера используя непосредственно API переводчика.
    Ответ написан
  • Как указать московское или серверное время в автоотправке запроса с помощью JS?

    @zkrvndm
    Софт для автоматизации
    Это делается так, ставится setInterval() для проверки текущего времени допустим каждый час, когда до назначенной даты остается несколько часов, меняем интервал проверки и уже проверяем дату каждую минуту. За несколько минут, начинаем уже проверять время каждую секунду и за несколько секунд до нужного времени, выкатываем setTimeout() с точным количеством миллисекунд для запуска вашей команды в точно указанное время.
    Ответ написан
    Комментировать
  • Как парсить комментариев vk по ключевому слову?

    @zkrvndm
    Софт для автоматизации
    Я бы вообще не использовал API, а тупо напрямую прошелся бы по всем комментариям при помощи JavaScript-бота.
    Ответ написан
    Комментировать
  • Как удалить кеш браузера на js?

    @zkrvndm
    Софт для автоматизации
    Если вам нужно применить изменения в стилях, то просто добавьте случайные GET-параметры при подключении стилей.
    Ответ написан
    Комментировать
  • Существуют ли способы удалять файлы выборочно из input multiple?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Я нащупал два решения для этой проблемы.

    Первый способ позволяет вставить произвольный Blob в поле <input type="file"> и для обработчиков на целевом сайте все будет выглядеть, будто в поле реально присутствуют файлы, хотя это конечно будет не так.

    Итак, функция для вставки:
    // Пример функции для вставки Blob в поле input:
    
    function pasteBlobToInput(blob, input) {
    	
    	// Конвертируем Blob в File:
    	var file = new File([blob], blob.name);
    	
    	// Создаем коллекцию файлов для последующий вставки:
    	var file_list = {0: file, length: 1, '__proto__': input['files']['__proto__']};
    	
    	// Сохраняем прототип поля:
    	var proto = input['__proto__'];
    	
    	// Подменяем прототип для разблокировки св-ства files на запись:
    	input['__proto__'] = document.createElement('div')['__proto__'];
    	
    	// Записываем коллекцию файлов:
    	input['files'] = file_list;
    	
    	// Возвращаем прототип на место:
    	input['__proto__'] = proto;
    	
    	// Выводим уведомление:
    	console.log('Коллекция успешно вставлена:');
    	console.dir(file_list);
    	
    	// Заставляем сработать обработчики на поле выбра файлов:
    	input.dispatchEvent(new InputEvent('change', { bubbles: true }));
    	
    }

    Первым параметром функции передаем Blob, а вторым элемент input куда нужно его вставить. Обратите внимание, что Blob должен иметь имя в свойстве name. Если у вас Blob без названия, то добавьте его. К сожалению, коллекция файлов способом выше создается неполноценная, но даже этой неполноценной коллекции достаточно чтобы обмануть обработчики. Я писал это решение для WhatsApp-бота и там у меня реально все работает)

    Второй вариант позволяет получать полноценные коллекции файлов и далее их вставлять и использовать их где угодно. Для начала нам нужно подключить библиотеку localforage:
    <script src="https://cdnjs.cloudflare.com/ajax/libs/localforage/1.9.0/localforage.js"></script>

    Далее, мы можем выбрать файлы для коллекции и сохранить их в памяти браузера:
    var input = document.createElement('input');
    input.setAttribute('type', 'file');
    input.setAttribute('multiple', 'multiple');
    input.addEventListener('change', async function() {
    	var files = await localforage.setItem('files', this.files);
    	console.log('Коллекция файлов успешно сохранена:');
    	console.dir(files);
    });
    input.click();

    Сохраненную коллекцию мы позднее сможем использовать даже после перезагрузки страницы или закрытия / открытия браузера. Для извлечения сохраненной коллекции достаточно выполнить:
    var files = await localforage.getItem('files');
    console.log('Коллекция файлов успешно извлечена:');
    console.dir(files);

    Эта коллекция полноценная и мы легко можем ее прицепить в любое поле:
    var files = await localforage.getItem('files');
    document.querySelector('input[type="file"]').files = files;

    При этом файлы в поле будут выглядеть точно так же, будто выбраны с компа, никаких отличий.
    Ответ написан
    Комментировать
  • Как разблокировать FileList на запись?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Лайфхак для создания коллекции файлов FileList:
    var info = 'Какой-нибудь текст';
    
    var dt  = new DataTransfer();
    dt.items.add(new File([info], 'primer.txt', {type: 'text/plain'}));
    var file_list = dt.files;
    
    console.log('Коллекция файлов создана:');
    console.dir(file_list);
    
    // Вставим созданную коллекцию в реальное поле:
    document.querySelector('input[type="file"]').files = file_list;

    В переменную info вместо текста, можно положить в том числе и Blob - это особенность функции new File() которая первым параметром может принять как массив из текстов, так и массив из Blob.

    Фактически лайфхак выше позволяет нам JavaScript-ом скачать любой какой угодно файл со своего сайта и вставить его абсолютно в любое поле <input type="file"> - что просто архиполезно для браузерных ботов.

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

    Огромное спасибо пользователю Mmx Symfony, который нарыл это решение где-то в недрах иностранных сайтов. Сам я, в свое время сколько не искал, везде был ответ, что это невозможно, а оказалось, что нихрена подобного =)
    Ответ написан
    Комментировать
  • Как клонировать один конкретный файл из коллекции FileList?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Лайфхак для создания коллекции файлов FileList:
    var info = 'Какой-нибудь текст';
    
    var dt  = new DataTransfer();
    dt.items.add(new File([info], 'primer.txt', {type: 'text/plain'}));
    var file_list = dt.files;
    
    console.log('Коллекция файлов создана:');
    console.dir(file_list);
    
    // Вставим созданную коллекцию в реальное поле:
    document.querySelector('input[type="file"]').files = file_list;

    В переменную info вместо текста, можно положить в том числе и Blob - это особенность функции new File() которая первым параметром может принять как массив из текстов, так и массив из Blob.

    Фактически лайфхак выше позволяет нам JavaScript-ом скачать любой какой угодно файл со своего сайта и вставить его абсолютно в любое поле <input type="file"> - что просто архиполезно для браузерных ботов.

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

    Огромное спасибо пользователю Mmx Symfony, который нарыл это решение где-то в недрах иностранных сайтов. Сам я, в свое время сколько не искал, везде был ответ, что это невозможно, а оказалось, что нихрена подобного =)
    Ответ написан
    Комментировать
  • Как программно вставить файлы в input?

    @zkrvndm Автор вопроса
    Софт для автоматизации
    Лайфхак для создания коллекции файлов FileList:
    var info = 'Какой-нибудь текст';
    
    var dt  = new DataTransfer();
    dt.items.add(new File([info], 'primer.txt', {type: 'text/plain'}));
    var file_list = dt.files;
    
    console.log('Коллекция файлов создана:');
    console.dir(file_list);
    
    // Вставим созданную коллекцию в реальное поле:
    document.querySelector('input[type="file"]').files = file_list;

    В переменную info вместо текста, можно положить в том числе и Blob - это особенность функции new File() которая первым параметром может принять как массив из текстов, так и массив из Blob.

    Фактически лайфхак выше позволяет нам JavaScript-ом скачать любой какой угодно файл со своего сайта и вставить его абсолютно в любое поле <input type="file"> - что просто архиполезно для браузерных ботов.

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

    Огромное спасибо пользователю Mmx Symfony, который нарыл это решение где-то в недрах иностранных сайтов. Сам я, в свое время сколько не искал, везде был ответ, что это невозможно, а оказалось, что нихрена подобного =)
    Ответ написан
    3 комментария
  • Через какую программу можно работать с хостингом?

    @zkrvndm
    Софт для автоматизации
    Вот, хороший вариант для правки файлов сайта на лету:
    https://sprut.io/ru/

    Если у вас вдруг имеется VDS на Beget, то они предоставляют этот файловый менеджер из под коробки.

    Если же у вас VDS где-то в другом месте, то нужно вручную установить программу, на сайте есть инструкция.
    Ответ написан
    Комментировать
  • Как сделать простое web-приложение по записи на прием?

    @zkrvndm
    Софт для автоматизации
    Присмотритесь к Google формам. Также есть аналог от конкурента: Яндекс формы. Просто забейте в поиск и легко их найдете.
    Ответ написан
    5 комментариев
  • Как убрать всплывающие подсказки при наборе в input?

    @zkrvndm
    Софт для автоматизации
    Просто используйте textarea вместо input. Кстати, в связке вот с этим плагином можно получить адаптивное по высоте поле ввода.
    Ответ написан
  • Как сохранить обработчики событий jQuery после применения к элементу .wrap()?

    @zkrvndm
    Софт для автоматизации
    Объедениете и переносите все обработчики на самый верхний уровень на body и уже в зависимости от того, что внутри event.target запускать тот или иной скрипт.

    Также можно не так радикально, просто вывести обработчики в соответствующие атрибуты у элементов.

    Если ни тот, ни другой вариант не подходит, то попробовать уже самому написать функцию для обертывания с теми параметрами, которые нужны.
    Ответ написан
  • Обязательно ли использовать meta charset="UTF-8" на странице?

    @zkrvndm
    Софт для автоматизации
    Вы можете не указывать кодировку в теле документа, но тогда нужно обязательно ее указать в заголовке ответа.
    Ответ написан
    Комментировать
  • Как получить данные с Яндекс Погоды?

    @zkrvndm
    Софт для автоматизации
    Проверил, действительно не работает:
    var xhr = new XMLHttpRequest();
    xhr.open('GET', 'https://api.weather.yandex.ru/v2/informers?lat=55.75396&lon=37.620393');
    xhr.setRequestHeader('X-Yandex-API-Key', '04aa3404-32a8-4baf-a280-db8a58bb908a');
    
    xhr.onreadystatechange = function() {
    	if (xhr.readyState === XMLHttpRequest.DONE) {
    		if (xhr.status === 200) {
    			var obj = JSON.parse(xhr.responseText);
    			console.log('Успех:');
    			console.dir(obj);
    		}
    		else {
    			console.log('Ошибка:');
    			console.dir(xhr);
    		}
    	}
    }
    
    xhr.send();

    Происходит это из-за отсутствия заголовка Access-Control-Allow-Origin на стороне Яндекса. Вам необходимо связаться с технической поддержкой Яндекса и уточнить почему отсутствует этот заголовок - возможно они просто недоглядели и это ошибка с их стороны, а возможно так и заудмано, что с фронта нельзя запросить погоду. В последнем случае, вам нужно проксировать запрос через свой сервер используя либо CURL либо file_get_contents()

    Если не знаете, что именно писать в Яндекс, просто дайте им ссылку на мой ответ, их спецы поймут о чем речь.
    Ответ написан
    Комментировать
  • Есть ли ограничения на количество файлов и папок на php-хостингах?

    @zkrvndm
    Софт для автоматизации
    У Beget есть бесплатный хостинг и там четко прописано максимальное количество файлов:

    Максимальное количество файлов: 25 000

    Если будете использовать их бесплатный хостинг, можете ориентироваться на эту цифру.
    Ответ написан
    Комментировать
  • Как расшифровать gzip архив из file_get_contents?

    @zkrvndm
    Софт для автоматизации
    Укажите в заголовках запроса, чтобы целевой сайт свой ответ отдавал без сжатия:
    <?php
    
    header('Content-type: text/html; charset=utf-8');
    
    $opts = array(
      'http'=>array(
        'method'=>"GET",
        'header'=>"Accept-Encoding: identity\r\n".
                  "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36"
      )
    );
    
    $context = stream_context_create($opts);
    
    $html = file_get_contents('https://www.rusprofile.ru/id/11597949', false, $context);
    
    echo $html;
    Ответ написан
    Комментировать
  • Какой есть инструмент для формирования и централизованного хранения документации по исходному коду?

    @zkrvndm
    Софт для автоматизации
    Пилите сайт, хоть на том же Битриксе и размещайте его локально. Можно даже на флешку записать при желании и потом всегда носить с собой:
    https://usbwebserver.yura.mk.ua/ru.php
    Ответ написан
  • Как сделать рандомно обновляющися div после обновления страницы?

    @zkrvndm
    Софт для автоматизации
    Вероятно вы говорите про рекламные баннеры. В большинстве случаев эти баннеры представляют собой небольшой сайт, который запихнули в iframe - это такая штука, которая позволяет отображать один сайт внутри другого.

    https://yandex.ru/search/?text=примеры%20использов...
    Ответ написан
    Комментировать
  • Почему не загружается страница через CURL?

    @zkrvndm
    Софт для автоматизации
    Для того, чтобы не было проблем при загрузке ресурса имеет смысл имитировать реальный браузер. Делает это при помощи передачи тех же заголовков, что отправляет Google Chrome при запросе. Пример передачи заголовков:
    <?php
    
    // Указываем тип документа и кодировку:
    header('Content-Type: text/html; charset=utf-8');
    
    // Включаем отображение ошибок:
    
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    
    // Адрес:
    $url = 'https://ссылка_на_страницу';
    
    // Создаём новый сеанс:
    $curl = curl_init();
    
    // Указываем адрес целевой страницы:
    curl_setopt($curl, CURLOPT_URL, $url);
    
    // О отключаем проверку SSL сертификата:
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    
    // Устанавливаем заголовки для имитации браузера:
    
    $headers = [];
    $headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9';
    $headers[] = 'Accept-Encoding: identity';
    $headers[] = 'Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7';
    $headers[] = 'Cache-Control: no-cache';
    $headers[] = 'Connection: keep-alive';
    $headers[] = 'Host: ' . parse_url($url)['host'];
    $headers[] = 'Pragma: no-cache';
    $headers[] = 'Sec-Fetch-Dest: document';
    $headers[] = 'Sec-Fetch-Mode: navigate';
    $headers[] = 'Sec-Fetch-Site: none';
    $headers[] = 'Sec-Fetch-User: ?1';
    $headers[] = 'Upgrade-Insecure-Requests: 1';
    $headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36';
    
    
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    
    // Разрешаем переадресацию:
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    
    // Запрещаем прямяой вывод результата запроса:
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    
    // Делаем сам запрос:
    $result = curl_exec($curl);
    
    // Завершаем сеанс:
    curl_close($curl);
    
    // Смотрм результат:
    echo $result;
    Ответ написан
    1 комментарий