• Как ограничить количество подключений прокси в Pyrogram?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    в Pyrogram документации не нашел подобного

    Все верно, Pyrogram не настолько гибкий по прокси, в сравнение с Telethon. Используйте внешний менеджер подключений/проксей и не будите зависеть от конкретной библиотеки, например:
    import asyncio
    from pyrogram import Client
    from pyrogram.errors import PyrogramError
    
    class ProxyManager:
        def __init__(self, app, max_retries=5, retry_delay=1, proxy=None):
            self.app = app
            self.max_retries = max_retries
            self.retry_delay = retry_delay
            self.proxy = proxy
            self.client = None
    
        async def connect(self):
            for attempt in range(1, self.max_retries + 1):
                try:
                    print(f"Connection attempt #{attempt}")
                    self.client = Client(**self.app, proxy=self.proxy)
                    await self.client.start()
                    print("The connection was established successfully.")
    
                except PyrogramError as e:
                    print(f"Connection error: {e}")
                    if attempt == self.max_retries:
                        print("The maximum number of connection attempts has been reached, stop!")
                        break
    
                    await asyncio.sleep(self.retry_delay)
    
        async def disconnect(self):
            if self.client:
                await self.client.stop()
                print("Connection is closed.")
    
    app = {
        'api_id': 'YOUR_API_ID',
        'api_hash': 'YOUR_API_HASH',
        'session_name': 'your_session_name'
    }
    
    proxy = {
        'scheme': 'http',  # or 'socks5'
        'hostname': 'your.proxy.hostname',
        'port': 1080,
        'username': 'user',
        'password': 'password'
    }
    
    # test run
    async def main():
        manager = ProxyManager(app, max_retries=3, retry_delay=2, proxy=proxy)
        await manager.connect()
        await manager.disconnect()
    
    asyncio.run(main())
    Ответ написан
    1 комментарий
  • Как выровнять шрифт внутри line-height?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    В CSS существует ограниченный набор свойств для непосредственного управления межстрочным интервалом или отступами непосредственно от букв. Либо это line-height, либо возня с отрицательными margin или псевдо элементами.

    Ну вот и у госов теперь все "ровно":
    line-height: 1;

    65c355178a2f0946400951.png
    Ответ написан
  • PHPStorm плагин для комментариев/заметок без фиксирования в git?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Code Note
    Видео

    screenshot_4f5e4091-907d-49bf-b071-495922130fcb
    Ответ написан
    Комментировать
  • Как сделать 301 редирект со всех страниц вида /folder/1-2/p1.php, /folder/1-2/3-4/p1.php и т.д. на /folder/p1/?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    RewriteEngine On
    # /folder/ => /folder/file-name/
    RewriteCond %{REQUEST_URI} ^/folder/.+/(p[0-9]+)\.php$
    RewriteRule ^folder/.+/(p[0-9]+)\.php$ /folder/%1/ [R=301,L]
    Ответ написан
  • Нормально если первый стейт менеджер для react который я буду учить - будет mobx, а не Redux?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Нормально если первый стейт менеджер для react который я буду учить — будет mobx, а не Redux?

    Нормально ли будет если в резюме есть mobx вместо redux?

    Давайте проведем анализ хэхэ на 02.2024:
    - Redux (772 вакансии).
    - Mobx (235 вакансий).
    - Zustand (21 вакансия).

    Резюмируя, Ваш навык Mobx примерно в 3 раза менее ценен на рынке, чем навык Redux. Разумеется, сравнение поверхностное, но какой то вывод можно сделать.
    Ответ написан
    6 комментариев
  • Кто должен делать отправку формы на сайте?

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

    Тот, кто это обязан делать по тз или распоряжению тимлида. Если это нигде не определено, то:
    - front запрашивает у back схему api для отправки данных с формы, и программирует отправку формы с учетом этой схемы.
    - back пишет api, взаимодействует с данными с фронта, проектирует и работает с бд.
    Ответ написан
    Комментировать
  • Как я могу выявить вредоносный код на python?

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

    Своими глазами я вряд ли увижу, то чего стоило бы опасаться.

    Найти того, кто сможет.
    Есть ли какие то инструменты для выявления того, чего не должно быть в коде?

    Антивирус? Но врятли на python пишут вирусы, а все остальное на вирусы не тянет, но данные утащить может.
    Ответ написан
    3 комментария
  • Почему при загрузке сайта на Pages не подключаются стили CSS?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Неверные пути до css и js файлов на странице. Замените все части путей в html с ./libs/ на /lofthouse/libs/.

    https://antcosm.github.io/lofthouse/libs/youtubeLi... теперь доступен, как и другие файлы.
    Ответ написан
    Комментировать
  • Как заблокировать доступ к ресурсу для конкретного региона?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    GeoIP ngx_http_geoip_module

    1. Nginx должен включать модуль ngx_http_geoip_module.
    2. Качаем БД GeoLite2 Country.
    3. Пример конфига (nginx.conf), с отправкой всех из Индии в 403 лес:
    http {
        geoip_country /path/to/GeoLite2-Country.mmdb;
        map $geoip_country_code $allowed_country {
            default yes;
            IN no; # banned india
        }
    }
    
    server {
        if ($allowed_country = no) {
            return 403;
        }
    }
    Ответ написан
    5 комментариев
  • Есть ли отвественность за генерацию случайных данных?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Есть ли отвественность за генерацию случайных данных?

    И возник вопрос есть ли какие-то юридические ограничения на создание таких библиотек?

    1. За генерацию данных и создание таких инструментов - нет.
    2. За хранение и публикацию ПД субъекта без его разрешения и с нарушением законодательства - да.

    Условно, если у Вас случайно получилось сгенерировать реальные данные определенного человека из п1, то Вы автоматом попадаете под п2.

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

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    https://openpyxl.readthedocs.io/en/latest/api/open...
    Обход всех строк на листе и вывод индекса каждой первой ячейки:
    from openpyxl import load_workbook
    
    wb = load_workbook('sheet.xlsx')
    sheet = wb.active
    
    for row in sheet.iter_rows():
        for cell in row:
            print(cell.row)
            break
    Ответ написан
    Комментировать
  • Как пофиксить ошибку с 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 комментарий