Задать вопрос
  • Selenium, как найти элемент (поискового запроса)?

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

    На python это будет выглядеть примерно так:
    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    
    try:
        driver.get('https://dzen.ru/')
    
        iframe = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "iframe.dzen-search-arrow-common__frame"))
        )
    
        driver.switch_to.frame(iframe)
    
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "input.arrow__input.mini-suggest__input"))
        )
    
        print(element)  # <selenium.webdriver.remote.webelement.WebElement (session="5e3642980c7d8fcb1b687f3c9a716998", element="f.15CF8DCC914EA871801192FF570A26AF.d.A418C847E39359367688E91E0850A734.e.5")>
    
        element.send_keys("Найдено!")
    
        time.sleep(20)
    
    finally:
        driver.quit()


    660eae28c59d0142362756.png
    Ответ написан
    2 комментария
  • С какого количества записей индексация имеет смысл?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    С какого количества записей индексация имеет смысл?

    С того момента, когда планировщик начал показывать приличную разницу, как только получаете прирост - используйте индексацию, не получаете - не используйте.
    Сделал выборку по определенному имени, вышло 75-90 мсек.
    SELECT name FROM users WHERE name='Mike';
    Добавил индекс CREATE INDEX name_idx ON users (name);
    Выборка так и осталась в пределах 75-85 мсек.

    Вы сами задали вопрос и сразу же ответили на него...
    Ответ написан
    Комментировать
  • Как переопределить класс в WP?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Наследованием и переопределением?
    class My_ReviewsListTable extends Automattic\WooCommerce\Internal\Admin\ProductReviews\ReviewsListTable {
        public function get_review_count($product_id) {
            $args = [
                'post_type' => 'product_review',
                'post_status' => 'publish',
                'meta_query' => [
                    [
                        'key' => 'custom_field',
                        'compare' => 'NOT EXISTS',
                    ],
                ],
                'fields' => 'ids',
            ];
    
    
            if($product_id) {
                $args['meta_query'][] = [
                    'key' => '_product_id',
                    'value' => $product_id,
                    'compare' => '=',
                ];
            }
    
            $query = new WP_Query($args);
            return $query->found_posts;
        }
    }
    Ответ написан
    1 комментарий
  • Как выполнять запросы в БД одновременно?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    какие локальные (которые в одном файле) базы данных это поддерживают?

    1. Можно использовать sqlite3, но нужно будет настроить очереди на взаимодействие с бд, либо использовать sqlalchemy, который имеет поддержку пула соединений.
    2. Другие файловые бд не вижу смысла использовать, т.к. скорее всего настройка таких не популярных бд будет сложнее, чем п1.

    Как использовать sqlite python в многопоточности?
    Ответ написан
    2 комментария
  • Как убрать кнопку "Добавить в корзину", если цена равна 0?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    https://wordpresslab.ru/e-commerce/huki-straniczy-...
    Как вариант, вначале использовать хуки woocommerce_single_product_summary и woocommerce_after_shop_loop_item, и по условию, удалять события woocommerce_template_single_add_to_cart и woocommerce_template_loop_add_to_cart:
    function test() {
        global $product;
    
        if($product->get_price() == 0 || $product->get_price() == '') {
            remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 99);
            remove_action('woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10);
        }
    }
    
    add_action('woocommerce_single_product_summary', 'test', 99);
    add_action('woocommerce_after_shop_loop_item', 'test', 99);
    Ответ написан
  • Хранение временных объектов на стороне клиента?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    не понимаю как обеспечить разделенное хранение и связь условного объекта (пусть json)

    1. Клиент запрашивает данные с сервера.
    2. Варианты:
    2.1. Сервер сам рендерит страницу, без помощи клиента.
    2.2. С сервера на клиент прилетает json, js на клиенте создает необходимую разметку, подставляя данные из json.
    обеспечить изменяемость данных

    Пишем условия на js/react, на основание которых будут изменяться данные.
    и защиту ключевых данных от изменения

    Все, что пришло на клиент - доступно клиенту. Все что пришло от клиента на сервер, по умолчанию опасно и требует проверки.
    Ответ написан
    Комментировать
  • Распределение показов объявления в CPC сетях?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    выбирают ЛУЧШЕЕ(результативное) объявление в группе и прекращают показы остальных объявлений для этой аудитории.

    Все верно, т.к. основное назначение группы - вычислить наиболее эффективное объявление этой группы.
    Обычная структура Рекламной кампании: Кампания -> Группа объявлений (таргетинг) -> Объявления

    В моем случае (одинаковый таргетинг), работает схема ниже:
    - РК 1 -> Группа -> Первое объявление.
    - РК 2 -> Группа -> Второе объявление.
    Ответ написан
  • Как этот JavaScript код переписать в JQuery?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    $(function() {
        $(window).on("click", e => {
            $('.header-nav-list-item.subnav').each(function() {
                const $subMenu = $(this).find(".header-nav-list-subnav-menu");
                const isVisible = e.target === this || $.contains(this, e.target);
                $subMenu.toggle(isVisible);
                // if (!isVisible) $subMenu.hide();
            });
        });
    });
    Ответ написан
    1 комментарий
  • Есть ли смысл в многоядерности ЦП?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Если на сервере будет один несчастный ботик, который не использует других библиотек, а также threading и т.п., есть ли смысл в 2-3-4 ядрах?

    Если не брать в расчёт затраты на операционку и любой прочий софт, не использовать asyncio и multiprocessing, а так же не выполнять код параллельно, то смысл в районе погрешности.

    Сколько ядер CPU можно использовать в Python?
    How to Use 100% of All CPU Cores in Python
    Ответ написан
  • Парсер парсит только первые 5 URL картинок, а дальше /app/static/media/no_thumbnail.c222b0530.svg, что делать?

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

    Не использовать requests для парсинга, а использовать selenium.
    Ответ написан
  • Я могу использовать модифицированную тему в интернете?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Я хочу отредактировать тему Вордпресса, распространяемую под лицензией GNU General Public License v2.
    Я могу использовать эту модифицированную тему для своего сайта в интернете? Как сделать это правильно, чтобы избежать юридических казусов?

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

    Если Вы не предлагаете скачать или продать эту тему, то да.
    Ответ написан
    1 комментарий
  • Как/где нынче визуально рисуют сайты?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Вопрос - а как сейчас принято делать веб-дизайн?

    1. Создание чернового макета (прототипа).
    2. Создание дизайна на основе п1. в Figma (все целевые страницы + минимум под 3 разрешения дисплея) и Photoshop (для сложной обработки изображений).
    3. Фронт:
    - Верстка и натяжка на CMS (bootstrap + свои компоненты).
    - Или более сложная разработка фронта на React (mantine + свои компоненты).
    + Сборщик webpack/nextjs с компиляцией, оптимизацией, нарезкой изображений и прочей мартышкиной работой.
    4. Тесты.
    5. Публикация.
    неужто исключительно в текстовом редакторе?

    Нет, в ide webstorm/phpstrom/pycharm.
    Ответ написан
    6 комментариев
  • Как получить текст ответа ASP Net Core API?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Как в случае ошибки получить данный текст ("Совпадений не найдено") на стороне клиента, с помощью JS?

    - fetch()
    - Axios

    fetch():
    fetch('//site.com/api/v1/send')
        .then((response) => {
            // error handler
            if (!response.ok) {
                return response.text().then((text) => throw new Error(text));
            }
    
            return response.json();
        })
    
        .then((data) => console.log('Свежая инфа: ', data))
        .catch((error) => console.error('ОшибкО:', error.message));
    Ответ написан
    Комментировать
  • Как лучше загрузить сайт на React на GitHub для доказательства, что он действительно на React?

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

    В репу заливается весь проект, исключая зависимости, так, чтобы можно было скопировать проект себе на локалку, поставить зависимости и:
    - Запустить в режиме разработки одной командой.
    - Собрать проект одной командой.
    - Выполнить тесты одной командой.

    Либо, чтобы из репы можно было скопировать лишь dist/ и сразу опубликовать это как приложение в любом месте, без дополнительных команд.
    От такого способа не будет видно, что применялся Реакт?

    Слепой не увидит ничего, в остальном - все чекается на раз-два.

    Рекомендую изучить крупные репы и обратить внимание на то, что там в рамках одной репы имеются исходники (src), сборки разных видов (dist/build), опубликованы все необходимые команды так, чтобы даже не зрячая обезьянка могла скопировать и выполнить эту команду, чтобы получить желаемый результат.
    Ответ написан
    1 комментарий
  • Почему не работает поиск по классу?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Что возвращает метод getElementsByClassName()?

    console.log(document.getElementsByClassName('child2')) // HTMLCollection

    Какому элемент Вы собрались изменять текст (textContent), если там целая html коллекция?

    Вначале, необходимо обойти коллекцию, одним из способов ниже:
    // old
    Array.from(document.getElementsByClassName('child2')).forEach((el) => {
        el.textContent = 'Измененная строка 2';
    });
    
    // new
    document.querySelectorAll('.child2').forEach((el) => {
      el.textContent = 'Измененная строка 2';
    });
    Ответ написан
    Комментировать
  • Как вывести сумму по колонке в джанго?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Примерно так (импорты и наименование в бд свои пропишите):
    from django.db.models import Sum
    from .models import Raschet
    
    # counter
    count = Raschet.objects.aggregate(total=Sum('summa'))['total']
    Ответ написан
    6 комментариев
  • Ошибка при запросе к API Тинькофф Кассы?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    а через Postman все как работало, так работает

    Но запрос из постмена Вы конечно же не покажите, чтобы сравнить ;)

    Попробуйте так:
    # response = requests.post("https://securepay.tinkoff.ru/v2/Init", data=data_json, headers=headers)
    response = requests.post("https://securepay.tinkoff.ru/v2/Init", json=data, headers=headers)
    Ответ написан
  • Как в next js добавить класс к элементу?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как в обычном реакте:
    const Icon = ({title, href, active}) => {
        const className = active ? 'active' : '';
    
        return (
            <Link href={href} className={`svgh m-auto ${className}`}>
                {/* svg */}
            </Link>
        );
    }

    'use client'
    import React, {useState, useEffect} from 'react';
    import Icon from './icons/Icon';
    
    const links = [
        {href: '#home_anchor', svgIcon: 'home'},
        {href: '#user_anchor', svgIcon: 'user'}
        // others
    ];
    
    const Navbar = () => {
        const [activeLink, setActiveLink] = useState('');
    
        useEffect(() => {
            const handleScroll = () => {
                // logic scroll
            }
    
            // add anchor
            window.addEventListener('scroll', handleScroll);
    
            // remove anchor from unmount
            return () => window.removeEventListener('scroll', handleScroll)
    
        }, []);
    
        return (
            <nav className="flex flex-col fixed bg-gray-800 align-center">
                {links.map((l) => (
                    <Icon href={l.href} key={l.svgIcon} title={l.svgIcon} active={activeLink === l.href}/>
                ))}
            </nav>
        );
    }
    Ответ написан
    1 комментарий
  • Реализация поиска только внутри модального окна?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Есть какие-то варианты решения данной проблемы? Знаю что можно впихнуть кастомный поиск и отменить эвент ctrl + f.

    Нативного - не встречал, только перехват и прослушка комбинации ctrl + f.
    Ответ написан
  • Как избавиться от моргания блоков при их смене после подгрузок данных с сервера?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Моргает он потому, что в момент отрисовки старый уже удален, а новый еще не отрисован. Варианты решения:
    - Убедиться точно, что новый контент загружен и лишь затем его выводить. Если контент будет слишком тяжелый для устройства клиента, то этот метод не сработает, т.к. устройству еще понадобится время для его рендера, т.е. моргание будет заметно.
    - Добавить некий loading в место, где ожидается появление новых данных.

    Как вариант, вместо пустого дива:
    <section>
        <div ref={tables} className={style.tableWrapper}>
            {isLoading ? createTable(currentTable) : createTable(table)}
        </div>
    </section>
    Ответ написан