Задать вопрос
  • Можно ли сверстать такую структуру на grid?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Можно ли сверстать блоки такого вида на grid? чтоб html верстка была без доп оберток а просто

    Можно, в 3 колонки и 4 строки.
    Ответ написан
    Комментировать
  • Можно ли в названии моей системы использовать словосочетание "Система мониторинга температуры"?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    имею ли я право в названии использовать словосочетание система мониторинга температуры?

    Имеете.
    Ответ написан
    Комментировать
  • Как на сегодняшний день интернет-магазины парсят товары?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Заказывают разработку индивидуальных парсеров? Заливают по API? Или какими-то другими еще способами загружают?

    Если можно готовым решением - используют его, если нет, то самопис. Это работает как для "поставщика", так и для конкурентов.
    Ответ написан
  • Царапины на процессоре. Критично?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Насколько это критично?

    Могут не принять на возврат, если он потребуется.
    Ответ написан
  • Как минифицировать HTML в WordPress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Поделитесь, какие способы используете вы.

    WebPack + html-minifier-terser.
    Ответ написан
    Комментировать
  • Как разэкранировать строку js?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    const encodedString = "\\x41";
    const decodedString = eval(`"${encodedString}"`);
    console.log(decodedString); // A
    
    // Или
    
    const encodedString = '"\\u0041"';
    const decodedString = JSON.parse(encodedString);
    console.log(decodedString); // A
    Ответ написан
    Комментировать
  • Wordpress sass - Почему проблема с обновлением файла scss?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Столкнулся с проектом в дизайне находиться gulpfile.js

    Консоль:
    1. Поставить ноду (рекомендую использовать nvm).
    2. Поставить галп глобально.
    3. Перейти в корень с проектом.
    4. Выполнить установку зависимостей (npm install), для этого в корне проекта должен лежать package.json с нужными зависимостями.
    5. Запустить галп (gulp), остальные команды можно посмотреть в package.json.
    Ответ написан
  • Кому лучше поручить адаптивную верстку - верстальщику или frontend разработчику?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Кому лучше поручить адаптивную верстку — верстальщику или frontend разработчику?

    Тому, кто по Вашему мнение лучше верстает.
    Насколько такое решение кажется логичным?

    У каждого своя логика.
    Не будет ли еще больших сложностей у разраба?

    Может стоит спросить у него?
    Ответ написан
    Комментировать
  • C# Как распаковать все содержимое конкретной папки в .zip архиве в папку на диске?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Часть кода из одного моего проекта, где решается похожа задача (поправить пути и логику при необходимости):
    using System.IO.Compression;
    
    string zipPath = @"path/zip.zip";
    string unZipPath = @"path/unzip-dir";
    string dirNameInZip = "dir-name";
    
    // Проверяем наличие архива
    if (!File.Exists(zipPath))
    {
        throw new FileNotFoundException("Ошибка, архив не найден.", zipPath);
    }
    
    // Создаем выходную директорию, если она не существует
    Directory.CreateDirectory(unZipPath);
    
    // Получаем архив
    using var archive = ZipFile.OpenRead(zipPath);
    
    // Ищем нужную директорию в архиве
    var folder = archive.Entries.FirstOrDefault((e) =>
        e.FullName.StartsWith(dirNameInZip + "/") && e.FullName.Length > dirNameInZip.Length + 1);
    
    if (folder == null)
    {
        throw new DirectoryNotFoundException($"Ошибка, директория '{dirNameInZip}' в архиве не найдена.");
    }
    
    // Извлекаем директорию со всеми данными
    foreach (var entry in archive.Entries.Where((e) => e.FullName.StartsWith(folder.FullName)))
    {
        string relativePath = entry.FullName[(folder.FullName.Length + 1)..];
        string filePath = Path.Combine(unZipPath, relativePath);
    
        // Создание вложенных директорий, если требуется
        string? directoryPath = Path.GetDirectoryName(filePath);
        if (!string.IsNullOrEmpty(directoryPath))
        {
            Directory.CreateDirectory(directoryPath);
        }
    
        // Извлечение файлов с перезаписью
        entry.ExtractToFile(filePath, overwrite: true);
    }
    Ответ написан
    5 комментариев
  • Как можно установить чат с поддержкой на сайт?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Как можно установить чат с поддержкой на сайт?

    - Установив плагин (множество бесплатных), онлайн-чаты для WP.
    - Руками, вставив соответствующий код в тему или плагин WP:
    -- Бесплатные: Quickley, Chatra, Бесплатный онлайн-чат для сайта на JS?
    -- Условно бесплатные: Bitrix24 chat, AmoCRM chat, Umnico Live Chat итп.
    -- Платные: JivoChat, Carrot quest, LiveChat итп.
    Ответ написан
    Комментировать
  • Отмена дефолтного поведения?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    tabs

    tabs? Неужели в нем лежит коллекция элементов? Если да, то необходим предварительный перебор коллекции (для выполнения метода preventDefault() для каждого из элементов коллекции), примерно так:
    tabs.forEach((el) => {
        el.addEventListener('click', (e) => {
            e.preventDefault();
        });
    });
    Ответ написан
    Комментировать
  • Как создать Сайт на 3-х языках?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Как создать сайт на 3-х языках?

    Создать подпапки с нужной лакализацией, например:
    - /news/1 (по умолчанию)
    - /en/news/1
    - /de/news/1
    или только создать поддомены en.site.com/ ru.site.com/site.com и создать отдельный сайт на каждом поддомене?

    Поддомены проигрывают в продвижение подпапкам.
    Ответ написан
    Комментировать
  • Как лучше реализовать SEO-описания для страниц в Nuxt 3?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Нормально ли (нужно ли?) для SEO, чтобы обновлялись описания при переходе по вкладкам на странице? Нормально ли (нужно ли, опять же) обновлять SEO для страниц, которые основываются на динамически подгружаемых данных (страница новости, к примеру)?

    1 уникальный url - 1 уникальный контент (текст и желательно, изображения). Динамика индексируется хуже статики, но склейка и санкции со стороны ПС накладываются так же эффективно ;)

    Если под вкладками понимаются табы в рамках одной страницы, то если вкладки не откраваются по якорю, то достаточно иметь уникальный контент на первой вкладке, а вот если открываются по якорю, то здесь момент очень неприятный - по сути, Вы показываете разный контент разным посетителям, а значит пытаетесь манипулировать выдачей.
    Ответ написан
    1 комментарий
  • Как поставить лайк на все комментарии видео в тикток?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Ладно, упарываться, так упарываться. Клики + получение новых элементов для кликов + прокрутка + все повторить, но не смешивать. Кликнуть на ролик, вставить и выполнить код в консоль браузера:
    async function clickByElement() {
        let element = document.querySelector('.css-1swe2yf-DivActionContainer.esns4rh0 [aria-pressed="false"]');
        if (!element) return null;
    
        console.log('Клик!')
        element.click();
        while (element.getAttribute('aria-pressed') !== 'true') {
            await new Promise(resolve => setTimeout(resolve, 100));
        }
        
        return true;
    }
    
    async function clickAllElements() {
        let foundClickable = false;
        while (await clickByElement() !== null) {
            foundClickable = true;
        }
        
        return foundClickable;
    }
    
    async function scrollToBottomAndClickAgain() {
        const scrollContainer = document.querySelector('.css-1qp5gj2-DivCommentListContainer.ekjxngi3');
        if (scrollContainer) {
            console.log('Крутим страницу и ждем 10 сек.')
            let lastScrollTop = scrollContainer.scrollTop;
            scrollContainer.scrollTop = scrollContainer.scrollHeight;
            await new Promise(resolve => setTimeout(resolve, 10000));
    
            if (scrollContainer.scrollTop !== lastScrollTop) {
                if (await clickAllElements()) {
                    await scrollToBottomAndClickAgain();
                } else {
                    console.log('Прокрутка выполнена, новые элементы для клика не найдены.');
                }
            } else {
                console.log('Достигли конца прокрутки, больше нечего прокручивать.');
                if (await clickAllElements()) {
                    await scrollToBottomAndClickAgain();
                } else {
                    console.log('Задача окончательно завершена, кликов больше не осталось');
                }
            }
        } else {
            console.error('Контейнер для прокрутки не найден');
        }
    }
    
    async function initiateClicksAndScroll() {
        if (await clickAllElements()) {
            await scrollToBottomAndClickAgain();
        } else {
            console.log('Нет элементов для начальных кликов, проверяем прокрутку');
            await scrollToBottomAndClickAgain();
        }
    }
    
    initiateClicksAndScroll().then(() => console.log('Задача выполнена май генерал!'));
    Ответ написан
  • Как нажать на все блоки с данным классом на странице с помощью JS?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Получаем все элементы методом .querySelectorAll().
    2. Перебираем п1. методом .forEach().
    3. Печатаем элемент и его номер из п1. (для наглядности) + кликаем по элементу п2. методом .click().
    document.querySelectorAll('.CLASSNAME').forEach((el, i) => {
        console.log(`Element №${i}, `, el);
        el.click();
    });

    Пример с ожидаем в 1 секунду, перед сбором и кликом по элементам:
    setTimeout(() => {
        document.querySelectorAll('.CLASSNAME').forEach((el, i) => {
            console.log(`Клик по элементу №${i}, `, el);
            el.click();
        });
    }, 1000);
    Ответ написан
  • Как сформировать маску, используя регулярное выражение?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Нужно получить маску ... по типу 1.1.1.1.1

    ^\d\.\d\.\d\.\d\.\d$
    ^(\d\.){4}\d$ [0]
    Ответ написан
    Комментировать
  • Как увеличить паузу между отправкой запроса и получением результата?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Пишу на Python программу для получения через API сайта информации с помощью requests.get()

    В этой связи вопрос: как можно увеличить эту паузу???

    Никак. requests возвращает исключительно, первый ответ сервера. Попробуйте библиотеку aiohttp или httpx.
    Ответ написан
    5 комментариев
  • Как на asp .net 7 подключить ssl для https протокола?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как мне сделать так, чтобы мой сервис используя эти файлы запускался на https в контейнере

    Пример Dockerfile конфига (при необходимости, поправить пути и наименования):
    FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
    WORKDIR /src
    COPY ["project.csproj", "."]
    RUN dotnet restore "project.csproj"
    COPY . .
    WORKDIR "/src/."
    RUN dotnet build "project.csproj" -c Release -o /app/publish
    
    FROM build AS publish
    RUN dotnet publish "project.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    COPY ["cert.pem", "key.pem", "/https/"]
    ENTRYPOINT ["dotnet", "project.dll"]

    https://learn.microsoft.com/en-us/aspnet/core/fund...
    Пример Program.cs:
    var builder = WebApplication.CreateBuilder(args);
    
    builder.WebHost.ConfigureKestrel(options =>
    {
        options.ListenAnyIP(443, listenOptions =>
        {
            listenOptions.UseHttps("/https/cert.pem", "/https/key.pem");
        });
    });

    Ну и при использование Nginx (например) в качестве обратного прокси, то придется настроить и его. С другой стороны, если у Вас будет стоять Nginx, то не совсем понятно, для чего гонять защищенный трафик между Nginx и ASPNET, т.к:
    1. Nginx универсальнее и производительнее ASPNET в данном контексте.
    2. Если подлинность трафика уже подтверждена на уровне Nginx, то зачем все тоже самое повторять дальше по цепочке, в ASPNET.
    Ответ написан
    Комментировать
  • Как проскролить страницу в право в определенном фрейме?

    Mike_Ro
    @Mike_Ro Куратор тега Selenium
    Python, JS, WordPress, SEO, Bots, Adversting
    Переключиться на этот фрейм, затем в этом контексте выполнять необходимые действия.
    Ответ написан
    Комментировать
  • Как выровнять по высоте заголовки в карточках товаров?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    как можно реализовать выравнивание высоты заголовков с помощью CSS/SCSS

    Никак. Т.к. даже, если задать минимальную высоту, то в 1 ряду могут появится элементы, у которых заголовок будет в 1 строку, а значит у всех появится пустое пространство снизу.
    Ответ написан
    Комментировать