• Как сконвертировать Blob в файл PHP?

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

    Покажите JavaScript которым Blob шлете.
    Ответ написан
  • Как сделать скачивание файла с редиректом на php?

    @zkrvndm
    Софт для автоматизации
    1. Файл качайте частями при помощи JavaScript в виде Blob, не забудьте только сделать понятную индикацию процесса
    2. Пока качается файл, можете внутри iframe показать любой какой угодно сайт посетителю, в том числе и рекламу
    3. Как только файл докачается отдаете его на сохранение, а iframe закрывайте
    Ответ написан
    Комментировать
  • Можно ли отдать пользователю на скачивание в один момент пару файлов?

    @zkrvndm
    Софт для автоматизации
    Вариантов несколько, самый очевидный это положить картинки в zip-архив и отдать на скачивание именно, что архив. Кроме этого, можно вместо скачивания картинок просто вывести ему html-страницу с мини галереей, где будут эти картинки и рядом с каждой картинкой была бы кнопка: Cохранить на диск
    Ответ написан
    Комментировать
  • Как дать понять что включен js и как представиться роботом при парсинге страницы?

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

    Пример:
    <?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://yousite.com';
    
    // Создаём новый сеанс:
    $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;


    Если метод не помогает, напишите ссылку на сайт, возможно подскажу что.
    Ответ написан
  • Как отключить картинку на заднем фоне сайта в браузере google chrome?

    @zkrvndm
    Софт для автоматизации
    Можно конечно, используйте UserScrit для блокировки изображения.
    Ответ написан
    Комментировать
  • Как добавить в массив dataTransfer.files еще один файл?

    @zkrvndm
    Софт для автоматизации
    Примерно так:
    var dt = new DataTransfer();
    dt.items.add(file1);
    dt.items.add(file2);
    dt.items.add(file3);
    console.dir(dt.files);
    Ответ написан
    Комментировать
  • Возможно ли создать массив FileList у пустого input[type=file]?

    @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 data = 'Здесь текст для файла или положите в переменную Blob';
    var file = new File([data], 'primer.txt', {type: 'text/plain'});
    
    // Создаем коллекцию файлов:
    var dt = new DataTransfer();
    dt.items.add(file);
    var file_list = dt.files;
    
    console.log('Коллекция файлов создана:');
    console.dir(file_list);
    
    // Вставим созданную коллекцию в реальное поле:
    document.querySelector('input[type="file"]').files = file_list;

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

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

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

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

    @zkrvndm
    Софт для автоматизации
    Для определения состояния поля используйте псевдоклассы:

    :foucus
    :invalid
    :valid


    Для установки иконок внутри поля справа, используйте абсолютное позиционирование на сами иконки и селекторы соседей, чтобы выводить те или иные иконки с опорой на состояние полей.
    Ответ написан
    Комментировать
  • Можно ли запустить виртуальную машину Windows 10 на хосте Ubuntu Server?

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

    Таким образом можно получить VDS с Windows по цене VDS с Linux. Но это конечно просто предположение, на практике не проверял никогда.
    Ответ написан
    Комментировать
  • Как обойти CloudFlare для bs4?

    @zkrvndm
    Софт для автоматизации
    Парсите в реальном браузере + подключите антикача сервис какой-нибудь.
    Ответ написан
    4 комментария
  • Как создать автокликер для определенного фрагмента сайта?

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

    @zkrvndm
    Софт для автоматизации
    Используйте CSS-стили, чтобы растянуть iframe на всю высоту и ширину окна браузера.
    Ответ написан
    Комментировать
  • Можно ли передать дескриптор CURL другому скрипту (процессу)?

    @zkrvndm
    Софт для автоматизации
    Если другой скрипт подключить через include / require то наверное можно.
    Ответ написан
    Комментировать
  • Как обойти блокировку парсера?

    @zkrvndm
    Софт для автоматизации
    Когда вы делайте первый запрос сайт ставит вам куки. Если при дальнейших ваших запросах вы не будете возвращать ранее установленные куки, то разумеется вас будут банить как бота и будут правы.
    5fbe2c8f8e57f037280472.png
    Ответ написан
    Комментировать
  • Как программно загрузить файл в поле?

    @zkrvndm
    Софт для автоматизации
    Комментировать
  • Что больше всего исползуется в браузере cookie, webStorage или indexedDB?

    @zkrvndm
    Софт для автоматизации
    Предпочитаю использовать IndexedDB.

    Только для работы с ней использую специальную библиотеку, которая упрощает ввод и вывод:
    <script src="https://cdnjs.cloudflare.com/ajax/libs/localforage/1.9.0/localforage.js"></script>

    Далее, чтобы сохранить какие-то данные достаточно выполнить в консоли браузера:
    result = await localforage.setItem('key', save_data);
    console.log('Данные успешно сохранены:');
    console.dir(result);

    Где в save_data лежат сохраняемые данные, а key это ключ по которому можно было бы получить к ним доступ.

    Из особенностей, в save_data мы можем положить любой тип данных - хоть строку, хоть массив, хоть объект. Да даже файл при желании можно сохранить! При этом нет ограничений по объему хранимых данных, можете хоть сто мегабайт положить, хоть триста запихнуть.

    Чтобы потом извлечь сохраненные данные выполняем:
    result = await localforage.getItem('key');
    console.log('Данные успешно извлечены:');
    console.dir(result);

    Срок хранения данных - неограниченно. Или пока пользователь вручную не обнулит кеш браузера.
    Ответ написан
  • Как выполнить такое действие на php?

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

    @zkrvndm
    Софт для автоматизации
    По умолчанию в html-тегах переносы строк игнорируются, поэтому вы и не видите переносы сделанные при помощи \r\n

    Однако это поведение вполне можно изменить, достаточно лишь применить к блокам в которых выводите информацию специальный стиль:
    <div style="white-space: pre-line;">
        Ваш текст
    </div>

    И текст будет показан с учетом переносов строк.
    Ответ написан
    Комментировать
  • Как передать данные в свое Google Chrome расширение с локального вебсервера?

    @zkrvndm
    Софт для автоматизации
    Используйте WebSocket, чтобы постоянно держать связь с вашим сервером и фоновым процессом в расширении.

    https://learn.javascript.ru/websocket
    https://yandex.ru/turbo/nuancesprog.ru/s/p/6466/
    Ответ написан
    Комментировать