• Как обойти проверку на бота cloudflare с помощью undetected-chromedriver?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как обойти проверку на бота cloudflare с помощью undetected-chromedriver?

    Либо реверсить капчу, либо разгадывать через специализированные сервисы (платно).
    Ответ написан
    Комментировать
  • Можно ли убрать подчеркивание ссылки в HTML не прибегая к CSS?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Можно ли убрать подчеркивание ссылки в HTML не прибегая к CSS и атрибуту style

    Нет
    Ответ написан
    Комментировать
  • Как новичку въехать в рекламу в яндекс.директ?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    За сколько времени можно въехать в тему?

    Зависит от Вас. Прочитать документацию и создать свои РК - быстро, а вот понять, как на самом деле все работает (а не как заявлено) - недели, месяцы, может, годы.
    Есть ли какие-нибудь хорошие курсы/ресурсы по делу?

    Рабочие схемы, которые приносят хорошую прибыль - не выкладывают.
    Может быть, лучше обратиться к профессионалу?

    Если не планируете в дальнейшем на этом зарабатывать, то это самый дешёвый вариант.
    Какими сервисами лучше пользоваться?

    Оригинальными + свой бот с авто обучением. Много слышал, как эти сервисы помогают, но не встречал ни одного человека в живую, чтобы он мне это подтвердил, обычно, наоборот рассказывают, что либо так же, как в оригинале, либо хуже. Видимо, мои тесты не исключение, а правило.

    За последние 2 года, эффективность данного сервиса резко упала, вероятно, за счёт исчезновения конкуренции. Сложность ведения и стоимость входа в рекламу выросли пропорционально.
    Ответ написан
    3 комментария
  • Почему цикл не корректно работает?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    def sum_of_square_digits(n):
        res = 0
        while n > 0:
            d = n % 10
            res += d * d
            n = n // 10
        return res
    
    def is_happy_number(n):
        for _ in range(10):
            n = sum_of_square_digits(n)
            if n == 1:
                return True
        return False
    
    print(is_happy_number(8))  # False
    print(is_happy_number(7))  # True
    Ответ написан
    4 комментария
  • Сколько ждать переезда сайта с http?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    1.5 недели назад отправил запрос на переезд сайта с http на https в веб мастере, до сих пор жду изменений, сколько мне ждать еще кто знает?

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

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    является ли это критичной ошибкой? или можно забить на нее?

    Является (дубли контента в рамках разных страниц), забить можно, законом не запрещено.

    Прописать в файле .htaccess:
    RewriteEngine On
    
    # 301 redirection from http to https
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    # 301 redirection from www to non www
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
    Ответ написан
  • Как создать json список со вложенными словарями в python?

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

    1. Вначале формируете словарь (или любые другие типы данных) со всеми необходимыми свойствами.
    2. Преобразуете п1. в json методом json.dumps().
    import json
    
    krevetko = 'иа креветкО!'
    
    data = {
        "form_id": 1345,
        "fields": [
            {"id": 1, "value": krevetko},  # <-- this is, krevetko variable
            {"id": 2, "value": 10306.25},
            {"id": 3, "value": {"item_id": 845}},
            {
                "id": 4,
                "value": [
                    {
                        "row_id": 0,
                        "cells": [
                            {"id": 6, "value": "2017-08-26"},
                            {"id": 9, "value": 10000}
                        ]
                    }
                ]
            }
        ]
    }
    
    print(json.dumps(data))
    
    # {"form_id": 1345, "fields": [{"id": 1, "value": "\u0438\u0430 \u043a\u0440\u0435\u0432\u0435\u0442\u043a\u041e!"}, {"id": 2, "value": 10306.25}, {"id": 3, "value": {"item_id": 845}}, {"id": 4, "value": [{"row_id": 0, "cells": [{"id": 6, "value": "2017-08-26"}, {"id": 9, "value": 10000}]}]}]}

    Больше примеров:
    import json
    
    data_dict = {"name": "John", "age": 30}
    data_list = [1, 2, 3, 4]
    data_string = "Hello, world!"
    data_string_cyrillic = "иа креветкО!"
    data_number = 42
    data_boolean = True
    data_none = None
    
    print(json.dumps(data_dict))  # {"name": "John", "age": 30}
    print(json.dumps(data_list))  # [1, 2, 3, 4]
    print(json.dumps(data_string))  # "Hello, world!"
    print(json.dumps(data_string_cyrillic))  # "\u0438\u0430 \u043a\u0440\u0435\u0432\u0435\u0442\u043a\u041e!"
    print(json.dumps(data_number))  # 42
    print(json.dumps(data_boolean))  # true
    print(json.dumps(data_none))  # null
    Ответ написан
    1 комментарий
  • Как реализовать две цены в карточках товаров (вариативных) в каталоге?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Примерно так:
    function test() {
        global $product;
    
        if($product->is_type('variable')) {
            $variations = $product->get_available_variations();
            echo '<div class="custom-variations-wrapper">';
    
            foreach($variations as $variation) {
                if(isset($variation['display_price'])) {
                    $variation_id = $variation['variation_id'];
                    $variation_price = $variation['display_price']; // or 'display_regular_price'
    
                    echo '<form action="' . esc_url($product->add_to_cart_url()) . '" method="post" enctype="multipart/form-data">';
                    echo '<div class="variation" data-variation-id="' . esc_attr($variation_id) . '">';
                    echo '<p class="price">' . sprintf(__('%s'), wc_price($variation_price)) . '</p>';
                    echo '<input type="hidden" name="product_id" value="' . esc_attr($product->get_id()) . '" />';
                    echo '<input type="hidden" name="variation_id" value="' . esc_attr($variation_id) . '" />';
                    foreach($variation['attributes'] as $attribute => $value) {
                        echo '<input type="hidden" name="' . esc_attr($attribute) . '" value="' . esc_attr($value) . '">';
                    }
                    echo '<button type="submit">' . __('В корзину') . '</button>';
                    echo '</div>';
                    echo '</form>';
                }
            }
    
            echo '</div>';
        }
    }
    
    add_action('woocommerce_after_shop_loop_item', 'test', 20);
    Ответ написан
    5 комментариев
  • Имитация действий пользователя на сайте?

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

    Написать на python + selenium алгоритм движение курсора (например, используя кривые безье и катмулл рома, классическую линейную интерполяцию + добавить шума) мыши по координатам, чтобы оно выглядело наиболее "человечным".
    Существует ли способ имитировать эти действия так, чтобы JavaScript успешно их распознавал, но без использования библиотеки PyAutoGUI или аналогичных, которые контролируют реальный курсор?

    Всего 2 варианта:
    - Запускать selenium в headless режиме, тогда не будет визуального окна и курсор мыши не будет перемещаться "в никуда", хотя для js на этом сайте все будет выглядеть "человечно".
    - Запускать selenium без headless режима, тогда курсор будет перемещаться в указанную область окна браузера.
    Ответ написан
  • Как вывести все элементы списка из массива списков json в Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Пример файла JSON

    Это не json, а python список.
    Например мне нужно найти список с id 10 и сохранить все его элементы в отдельный

    Т.к. мысля закончилась, предположу, что отдельный - это "отдельный переменная":
    list_data

    list_data = [
        {
            "id": 121,
            "type": "form_link",
            "name": "cust",
            "tooltip": "",
            "value": {
                "task_id": 432122,
                "task_ids": [
                    1236733
                ],
                "subject": "test_event"
            }
        },
        {
            "id": 122,
            "type": "text",
            "name": "Регион",
            "tooltip": "",
            "value": "MGN."
        },
        {
            "id": 129,
            "type": "text",
            "name": "Проблема",
            "tooltip": "Заправьте картридж",
            "value": "TEST"
        },
        {
            "id": 10,
            "type": "person",
            "name": "Ответственный",
            "tooltip": "none",
            "value": {
                "id": 888,
                "first_name": "Pavel",
                "last_name": "Perkov",
                "email": "example@anime.com",
                "type": "user",
                "status": "WORKING",
                "web_session_settings": {
                    "disable": False
                },
                "mobile_session_settings": {
                    "disable": False
                }
            }
        }
    ]


    # mega function
    def test(data, target_id):
        for item in data:
            if item.get('id') == target_id:
                return item
        return None
    
    res = test(list_data, 10)
    print(res)
    
    # {'id': 10, 'type': 'person', 'name': 'Ответственный', 'tooltip': 'none', 'value': {'id': 888, 'first_name': 'Pavel', 'last_name': 'Perkov', 'email': 'example@anime.com', 'type': 'user', 'status': 'WORKING', 'web_session_settings': {'disable': False}, 'mobile_session_settings': {'disable': False}}}
    Ответ написан
    1 комментарий
  • Почему не работает код бота telebot?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    item2 = types.KeyboardButton(text="Семья в России"),

    Уберите запятые в конце строк, чтобы не было проблем с кортежами.

    bot.reply_to это откуда? По идее, должно быть bot.send_message, исправил код, допишите все нужные кнопки и попробуйте, должно заработать:
    @bot.message_handler(commands=["start"])
    def start(message):
        keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
        item1 = types.KeyboardButton(text="Основные документы гражданина Российской Федерации")
        # прочее...
    
        keyboard.add(item1, item2)
        # прочее...
    
        bot.send_message(
            message.chat.id,
            f"Привет",
            f"{message.from_user.first_name}! Я бот, который поможет тебе. Что ты хочешь узнать..?",
            reply_markup=keyboard)
    Ответ написан
    1 комментарий
  • Проблема с плагином кастомной оплаты?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Здесь что лежит?
    $response_body['data']['attributes']['redirect_url'];

    А здесь?
    $response_body['data']['attributes'];
    Подозреваю, что нужно так:
    $response_body['data']['attributes']['hpp_url'];
    Еще интересный момент со статусом оплаты [status] => process_pending, возможно, платеж еще не обработан и нужно время.
    Ответ написан
  • Откуда React берет объект для инициализации хуков без пути к нему?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Реакт использует контекст, чтобы управлять хуками и их состоянием. Когда компонент реакта рендерится, реакт устанавливает ReactCurrentDispatcher (текущий диспетчер хуков) в соответствующий объект диспетчера для этого рендера. Это позволяет хукам (например, useState) обращаться к текущему состоянию и методам жизненного цикла компонента без необходимости явно передавать какие либо ссылки на компоненты или их состояние.

    https://github.com/facebook/react/issues/14022#iss...
    Переменная ReactCurrentDispatcher.current по умолчанию имеет значение null, потому что вне контекста рендера компонента использование хуков не имеет смысла. Если Вы попытаетесь использовать хук вне компонента (в обычной функции JavaScript), ReactCurrentDispatcher.current будет null, что приведет к ошибке, указывающей на неверный вызов хука.

    Реализация хуков находится в исходном коде реакта. Там же можно посмотреть, как реакт реализует useState и прочие хуки.

    How hooks work | How React Works
    Заметка о том, как работают хуки в React
    Первое погружение в исходники хуков
    Ответ написан
    4 комментария
  • Как создать отдельные категории для страниц wordpress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Добавление поддержки категорий (и меток) для страниц, functions.php:
    function test() {
        register_taxonomy_for_object_type('category', 'page');
        register_taxonomy_for_object_type('post_tag', 'page');
    }
    
    add_action('init', 'test');
    Ответ написан
    Комментировать
  • Как обрезать описания рубрик в админке Worpress?

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

    functions.php:
    // add custom column
    function add_custom_column($columns) {
        $columns['short_description'] = __('Краткое описание', 'my_custom_plugin');
        unset($columns['description']);
        return $columns;
    }
    
    add_filter('manage_edit-category_columns', 'add_custom_column');
    
    // fill custom column
    function fill_custom_column($deprecated, $column_name, $term_id) {
        if('short_description' === $column_name) {
            $term = get_term($term_id);
            echo mb_substr($term->description, 0, 20) . (mb_strlen($term->description) > 20 ? '…' : '');
        }
    }
    
    add_action('manage_category_custom_column', 'fill_custom_column', 10, 3);
    Ответ написан
    1 комментарий
  • Как захватить все запросы с trailing slash на конце?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Работает?
    location ~ ^(.+)/+$ {
        ...
    }
    Ответ написан
    Комментировать
  • Можно ли как-то определить (селектором ?), что после элемента идёт разрыв страницы печати?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Можно ли как-то определить (селектором ?), что после элемента идёт разрыв страницы печати?

    CSS селектором? - нельзя.

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

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Хотя Вы и используете асинхронный код выше (в telegram боте), Ваши функции, которые работают с google sheets и бд, работают синхронно. В этом случае, даже если Вы оборачиваете их в await, то они чудесным образом не станут асинхронными и все равно заблокируют исполнение асинхронного eventloop, пока не завершат свою работу.

    Чтобы решить Вашу проблему, необходимо использовать библиотеки, которые умеют в асинхронную работу, бд - aiosqlite, а с google sheets - хз, вроде подходит gspread_asyncio.
    Ответ написан
    Комментировать
  • Как выполнять javascript не только в браузере?

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

    Можно сохранить в localStorgae или IndexedDB хорошая библиотека localForage.
    Ответ написан
    1 комментарий