Задать вопрос
  • Как пофиксить ошибку с TeleBot?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    С моим токеном работает:
    import telebot
    
    bot = telebot.TeleBot("TOKEN")
    
    # handler /start
    @bot.message_handler(commands=['start'])
    def start_message(message):
        bot.send_message(message.chat.id, 'Йоу')
    
    bot.polling(none_stop=True)
    Ответ написан
    Комментировать
  • Ошибка 403 при парсинге сайта?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Обнаружил некую защиту "на лоха", а значит request и обычный selenium не справятся, буду использовать selenium + selenium-stealth (пример от сюда) + chrome + socks5 (рабочий, на момент теста):
    import time
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    from selenium_stealth import stealth
    
    proxy = '45.132.75.19:23820'
    
    options = Options()
    options.add_argument('--proxy-server=socks5://' + proxy)
    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_argument("window-size=1920,1080")
    # options.add_argument("--incognito")
    options.add_argument("--disable-extensions")
    options.add_argument("--disable-plugins-discovery")
    options.add_argument("--start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    
    executable_path = './chromedriver-121.0.6167.85.exe'
    
    service = Service(executable_path=executable_path)
    driver = webdriver.Chrome(service=service, options=options)
    
    stealth(driver,
            languages=["en-US", "en"],
            vendor="Google Inc.",
            platform="Win64",
            webgl_vendor="Intel Inc.",
            renderer="Intel Iris OpenGL Engine",
            fix_hairline=True,
            run_on_insecure_origins=True,
            user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.85 Safari/537.36',
            )
    
    try:
        driver.get('https://allegro.pl/kategoria/laptopy-491')
        time.sleep(30)
        print(driver.page_source)
    finally:
        driver.quit()

    Chromedriver качать здесь, он должен совпадать с мажорной версией Вашего Chrome браузера, который будет использовать Selenium.

    65c1e056ad6db620469150.png
    Ответ написан
    Комментировать
  • Как забрать html код со страницы?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Пытался забрать html простым реквестом, получалась не очень

    попробовал через selenium - получил то же самое

    Не spa, не ajax и защиты нет, а значит request вполне справится, ниже рабочий пример, который печатает всю html страницу (российские ip блочат (403), использовал рабочий socks5):
    import requests
    import socks
    import socket
    
    socks.set_default_proxy(socks.SOCKS5, "45.56.219.55", 52759)
    socket.socket = socks.socksocket
    
    url = 'https://www.skiddle.com/festivals/dates.html'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    
    try:
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()
        print(response.text)
    
    except requests.exceptions.HTTPError as errh:
        print("Http Error:", errh)
    except requests.exceptions.ConnectionError as errc:
        print("Connecting Error:", errc)
    except requests.exceptions.Timeout as errt:
        print("Timeout Error:", errt)
    except requests.exceptions.RequestException as err:
        print("Other Error", err)

    print(response.text)

    <!DOCTYPE html>
    <!--[if lt IE 7]><html class='ie ie6 lte9 lte8 lte7 no-js'> <![endif]-->
    <!--[if IE 7]><html class='ie ie7 lte9 lte8 lte7 no-js'> <![endif]-->
    <!--[if IE 8]><html class='ie ie8 lte9 lte8 no-js'> <![endif]-->
    <!--[if IE 9]><html class='ie ie9 lte9 no-js'> <![endif]-->
    <!--[if gt IE 9]><html class='ie no-js'><![endif]-->
    <!--[if !IE]><!--> <html class='no-ie no-js' lang='en'><!--<![endif]-->
    
    <head><!-- Basic Page Needs
    ================================================== -->
    <title>A-Z of Future Festivals</title>
    <link rel="manifest" href="/manifest.json">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><!-- DNS Prefetching
    ================================================== -->
    
    
    
    
    <link rel="preconnect" href="https://d31fr2pwly4c4s.cloudfront.net"/>
    <link rel="preconnect" href="https://d1plawd8huk6hh.cloudfront.net"/>
    <link rel="preconnect" href="https://www.google-analytics.com" />
    
    
    <link rel="preload" href="https://d1plawd8huk6hh.cloudfront.net/css-responsive2/fonts/BuenosAires/BuenosAiresWeb1-Regular_gdi.woff2" as="font" type="font/woff2" crossorigin="anonymous">
    <link rel="preload" href="https://d1plawd8huk6hh.cloudfront.net/css-responsive2/fonts/BuenosAires/BuenosAiresWeb1-Bold_gdi.woff2" as="font" type="font/woff2" crossorigin="anonymous">
    
    
    <link rel="dns-prefetch" href="https://d31fr2pwly4c4s.cloudfront.net"/>
    <link rel="dns-prefetch" href="https://d1plawd8huk6hh.cloudfront.net"/>
    <link rel="dns-prefetch" href="https://www.google-analytics.com" />
    <link rel="dns-prefetch" href="//connect.facebook.net" />
    <link rel="dns-prefetch" href="//www.googleadservices.com" />
    <link rel="dns-prefetch" href="//www.stay22.com" />
    <link rel="dns-prefetch" href="//api.stay22.com" />
    <link rel="dns-prefetch" href="//skiddle.imgix.net" />
    <link rel="dns-prefetch" href="//skiddleartists.imgix.net" />
    
    <!-- CSS
    ================================================== -->
    
    <meta property="fb:app_id" content="102483650494"/>
    <meta http-equiv="x-dns-prefetch-control" content="on"/>
    <meta name="insight-app-sec-validation" content="5574b896-289f-48c0-aebb-98730b831151">
    
    <!-- Mobile Specific Metas
    ================================================== -->
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    ...

    Ответ написан
  • Пойдет ли такой ноутбук для работы в фотошопе и илюстраторре?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Процессор - Intel(R) Celeron(R) N4020 CPU @ 1.10GHz 1.10 GHz

    Это не серьезно в 2015 году.
    Оперативная память - 4,00 ГБ

    Это не серьезно в 2020 году.
    Если установить версию по старее, будет ли нормально работать в нем?

    Нет, ибо фотошоп и илюстратор работают нативно лишь на винде и маке, понижение версии os не увеличит производительность, но добавит багов.

    Для фотошопа и илюстратора важны минимум средняя дискретка и процессор. Щас сижу на ноуте с Win11 + gtx 1650 + последний фотошоп и илюстратор - фризят макеты весом 200мб.
    Ответ написан
  • Бан бота по PHPSESSID в htaccess?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    как в RewriteCond сделать правило на просмотр файла и если в нем есть совпадения с %{HTTP_COOKIE}

    Если можно изменить конфиг апача, то можно использовать RewriteMap с файлом:
    RewriteMap blocked txt:/banned.txt
    RewriteCond %{HTTP_COOKIE} PHPSESSID=(.+)
    RewriteCond ${blocked:%1} =1
    RewriteRule ^ - [F]

    Если возможности модификации конфига апача нет, то только средствами python (например), переадресовывая на этот скрипт, который уже будет выполнять все манипуляции, но в таком варианте, производительность будет не такая быстрая, как у апача или nginx.
    Ответ написан
  • Официальное трудоустройство гражданина РБ на удаленку в российскую компанию?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    С подачи товарища Владислав Лысков , изменил ответ.

    Официальное трудоустройство гражданина РБ на удаленку в российскую компанию?

    Условно, нельзя:

    Дело в том, что работодатель обязан обеспечить безопасные условия и охрану труда всех своих сотрудников, в том числе дистанционных (ст. 312.3 ТК). При этом нормативно-правовые документы Российской Федерации, которые содержат нормы труда, действуют только на территории России (ст. 13 ТК).

    Таким образом, обеспечить безопасные условия труда для дистанционных сотрудников, работающих за границей, ни формально, ни юридически не представляется возможным. Поэтому с такими сотрудниками рекомендуется заключать гражданско-правовые договоры. Такие разъяснения дают и специалисты официальных ведомств в письмах Минтруда от 16.01.2017 № 14-2/ООГ-245, от 17.02.2016 № 14-2/В-125 и Роструда от 26.02.2016 № ТЗ/437-6-1.

    Риск состоит в том, что такой трудовой договор не будет действовать, а работодателя могут привлечь к административной ответственности за нарушение ст. 13 ТК РФ.
    Ответ написан
    9 комментариев
  • Почему нельзя войти в phpPgAdmin на OpenServer?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    У меня так же возникли проблемы с авторизацией, помогла ветка на их форуме.
    Ответ написан
  • Работает ли сейчас meta keywords?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Но вот на днях прочитал, что meta keywords считается застарелым и поисковики его не используют сейчас.

    Не совсем. ПС использует любые факторы о сайте для его ранжирования, просто некоторые факторы важнее других. В моем списке, keywords стоят на 34 позиции из 53, по влиянию на ранжирование.

    Гуглите "seo check list".
    Ответ написан
    1 комментарий
  • Как обучиться работе в рекламных кабинетах без проекта?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Чтобы иметь хоть какое-то представление на практике о работе в них?

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

    Фактически, чтобы научиться работать в Директе и Гугле, необходимо выполнить хотя бы одно из условий:
    1. Слить несколько десятков/сотен тысяч на тесты в разных тематиках.
    2. Найти ментора, который уже выполнил пункт 1.
    Ответ написан
  • На сколько разрешено перепост с заблокированных сайтов и разумно ли это?

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

    Он заблочен РКН, но не признан экстремистской организацией, в отличие от инсты и fb.
    Правила твиттера, при цитирование, Вы должны поставить ссылку на источник.
    С одной стороны мне кажется её рискованно делать, с другой видел много новостей, которые пришли с заблокированных сайтов и всё вроде нормально.

    Ошибка выжившего, Вас не будут трогать, пока Вы не представляете интереса.
    Ответ написан
    Комментировать
  • Как прокрутить таблицу на странице, которая сама не скроллится?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Вам необходимо скролить не страницу, а элемент. Вот мой пример, как скролить определенный элемент: Как проскролить в определенной облачи экран в selenium?
    Ответ написан
  • Fake useragent Error verify?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    got an unexpected keyword argument 'verify_ssl'

    Ну там же на русско-питонячьем написано, что в конструкторе класса FakeUserAgent не поддерживается аргумент verify_ssl.

    https://pypi.org/project/fake-useragent/
    0.1.6 April 2, 2017
    verify_ssl options added, by default it is True (urllib.urlopen ssl context for Python 2.7.9- and 3.4.3- is not supported)
    1.2.0 August 2, 2023
    Parameter use_external_data=True and verify_ssl are removed. If you use those parameters, just remove it in your code!
    Ответ написан
  • Как указать в коде, что заданный индекс выходит за границу всей строки?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    def f(string, index, length):
        return not (length < 0 or index < 0 or index >= len(string) or length + index > len(string))
    
    string = 'Winter is coming'
    
    print(f(string, 4, 4))
    # True
    
    print(f(string, 4, -1))
    # False
    
    print(f(string, -1, 4))
    # False
    
    print(f(string, len(string), 4))
    # False
    
    print(f(string, len(string) - 3, 5))
    # False
    Ответ написан
    6 комментариев
  • Как полученный список разделить на три столбца, содержащие одинаковые по высоте и ширине ячейки?

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

    Ответ написан
  • Что делает единичная звездочка в аргументах метода Python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Что делает единичная звездочка в аргументах метода Python?

    namedtuple(
    typename,
    field_names,
    *,
    rename=False,
    defaults=None,
    module=None,
    )

    Ни разу не встречал такое раньше, в документации тоже не смог откопать

    PEP 3102
    Ответ написан
    Комментировать
  • Как редактировать содержимое input?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Подскажите, как изменить содержимое input в html?

    <div class="ant-input-number-input-wrap">
        <input autocomplete="off" role="spinbutton" step="1" class="ant-input-number-input" value="100&nbsp;000" aria-valuenow="100000">
    </div>

    const input = document.querySelector('.ant-input-number-input');
    input.value = 'new value';

    Если редактировать непосредственно в атрибутах (value и aria-valuenow), то в самом input на странице изменения не отображаются (остается значение "100 000"), на сервер возможно уйдет значение из этих атрибутов, но как обновить отображение?

    Можно использовать MutationObserver для наблюдения за изменения значения атрибута aria-valuenow, и сразу менять значение input:
    const cb = (mutationsList, observer) => {
        for (const mutation of mutationsList) {
            if (mutation.type === 'attributes' && mutation.attributeName === 'aria-valuenow') {
                mutation.target.value = mutation.target.getAttribute('aria-valuenow');
            }
        }
    }
    
    const input = document.querySelector('.ant-input-number-input');
    const observer = new MutationObserver(cb);
    observer.observe(input, {attributes: true});
    Ответ написан
  • Как спарсить сайт, требующий авторизацию с кодом из смс?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Какие есть способы для решения задачи (желательно из ЯП использовать python)

    Желательно - это "не обязательно".
    Тинькофф сбрасывает любые сессии каждые 12 часов

    Вполне ожидаемо для сервиса, работающего с деньгами.
    Проблемы возникают на моменте ввода кода из смс, как его можно перенаправить серверу?

    - Получать смс на временный номер, используя специализированные сервисы с api.
    - Поставить на телефон приложение, которое будет перехватывать определенные смс и слать их указанным образом по указанному адресу, например SMS forwarder или SMS Backup & Restore.
    - Написать свое приложение (если не доверяете чужим), которое сделает все тоже самое, что пункт выше, но здесь будет использоваться не python, а kordova/react-native/flutter/kotlin.
    Ответ написан
    Комментировать
  • Автоматическая генерация контента на станице на основании GET параметров, хороший вариант для SEO?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Автоматическая генерация контента на станице на основании GET параметров, хороший вариант для SEO?

    Подгружается не только содержимое, но еще меняет title и description.

    Идеально ужасный, чтобы страницы вылетела из индекса, а если таких страниц наберется критический процент, то может и весь сайт отлететь в теневой бан.

    По сути, Вы будите показывать ПС разные данные в рамках 1 страницы. Вы можете сыграть в рулетку с ПС и попытаться спустя 5-10 сек изменять контент страницы на основе url параметров, я уже сыграл.
    С точки SEO это вообще будет как-то продвигаться или для каждого вопроса делать отдельную страницу?

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

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Попытка понять мыли автора №1:


    Попытка понять мыли автора №2:
    Ответ написан
  • Как напечатать слово посимвольно в цикле while в обратном порядке?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    def f(word):
        i = len(word) - 1
        while i >= 0:
            print(word[i])
            i -= 1
    
    f('abcde')
    
    # e
    # d
    # c
    # b
    # a
    Ответ написан
    1 комментарий