Профиль пользователя заблокирован сроком с 12 апреля 2022 г. и навсегда по причине: спам
  • Не получается сделать time.sleep(). Что делать?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Вам нужно читать файл так:
    with open('accounts.txt', 'r', encoding="utf8") as file:
        lines = file.read().split('\n')

    Функция readlines() оставляет в конце строки \n который воспринимался как нажатие Return и происходит это, соответственно, до того как будет поставлена галочка чек-бокса.
    Ответ написан
  • Как сделать нажатие кнопки по координатам Selenium?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    checkboxes = driver.find_elements(By.XPATH, '//input[@type="checkbox"]')
    for box in checkboxes:
        try:
            box.click()
        except Exception:
            pass

    5d3dc70b22626828660069.jpeg
    Ответ написан
  • Можно ли получить Rising talent на Upwork?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    А ваш аккаунт еще не заблокирован? Обычно за бездействие на upwork блокируют аккаунты.
    Если всё-же он не заблокирован, то вам нужно заполнить профиль на 100%, т.е. все поля в профиле: портфолио, образование, доп. опыт и прочее. Так-же желательно протий Upwork Readliness Test, естественно перед этим ознакомиться с правилами сервиса, что-бы не завалить его.
    А вообще вся информация есть на самом Upwork.
    Ответ написан
  • Python учитывает табуляцию в условиях?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Да. Перед тем как программировать на каком-то языке, неплохо было-бы хотя-бы его синтаксис выучить.
    Ответ написан
  • Копируется ли словарь при импорте?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    непосредственном передастся сам словарь?

    Да.
    dict_for.py:
    test_dict = {'a': 'b', 'c': 'd'}
    print(id(test_dict))

    dict_import.py:
    import dict_for
    
    from dict_for import test_dict
    print(id(test_dict))

    PS D:\Dropbox\Develop\all_tests> python dict_import.py
    9434768
    9434768

    Вот, если что еще и вывод адреса в памяти:
    print(hex(id(test_dict)))
    PS D:\Dropbox\Develop\all_tests> python dict_import.py
    0xb4bd20
    0xb4bd20
    Ответ написан
    Комментировать
  • Какое влияние на профиль оказывают кнопки "Withdraw Proposal" и "Archive"?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Как скажется на моём профиле, если я нажму ну кнопку Withdraw Proposal?

    Никак, просто отмените заявку.
    И как повлияет эта кнопка "Archive"?

    Заявка продолжит висеть в системе, просто у вас в общем списке не будет отображаться. Найти эту заявку потом можно будет в Proposals -> Archived.
    Ответ написан
    Комментировать
  • Как заставить функции работать одновременно?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    def w():
       for i in range(1, 5):
          print("q")
          print(i,"w")
         
    
    def w1():
       for i in range(1, 5):
          print("q1")
          print(i,"w1")
       
          
    def main():
       Thread(target=w).start()
       Thread(target=w1).start()
    
    main()

    This is console module
    q
    1 w
    q1
    q
    1 w1
    2 w
    q1
    q
    2 w1
    3 w
    q1
    q
    3 w1
    4 w
    q1
    4 w1


    target=w() - так вы вызываете функцию, соответственно ждёте пока она не отработает.
    continue вам нигде не нужен, цикл и без них будет итерироваться.
    Последний блок while будет бесконечно порождать потоки и очень скоро скрипт умрёт.
    Ответ написан
  • Какие могут быть способы определения автоматизации Selenium?

    kshnkvn
    @kshnkvn Автор вопроса
    yay ✌️ t.me/kshnkvn
    Перепробовал кучу разных вариантов, вот что из них может сработать для кого-то (не для меня):
    1. Очень сомнительно, но некоторые люди пишут, что для них это работало:
    Изменение название переменной документа js, используемой Selenium - $cdc_. Для этого достаточно открыть файл chromedriver.exe в любом шестнадцатеричном редакторе (я использовал HxD) изменить её название на любое другое. Это не сработало для меня, но сам chromedriver работает нормально после этого. Так-же я пробовал изменить все переменные где есть слова driver, но это была плохая идея - chromedriver перестал запускать. Без изменения исходников тут точно не обойтись, но я не уверен что это может сработать.
    2. Это более действующий вариант, который даёт хоть какой-то результат. На этой странице можно определить используется chromedriver, или нет и при запуске этой страницы через selenium действительно отображается, что используется webdriver. Добавление следующего куска кода помогло обойти эту идентификацию:
    options.add_experimental_option("excludeSwitches", ['enable-automation'])

    Но это всё-равно не помогло мне.
    Так-же нашел очень сомнительное и вероятнее всего просто нерабочее решение:
    Запуск js-кода, который меняет состояние переменных navigator, включая navigator.webdriver.
    Так он запускается:
    driver.execute_script("var s=window.document.createElement('script'); s.src='javascript.js';window.document.head.appendChild(s);")

    Сам js-код
    // overwrite the 'languages' property to use a custom getter
    const setProperty = () => {
        Object.defineProperty(navigator, "languages", {
            get: function() {
                return ["en-US", "en", "es"];
            }
        });
    
        // Overwrite the 'plugins' property to use a custom getter.
        Object.defineProperty(navigator, 'plugins', {
            get: () => [1, 2, 3, 4, 5],
        });
    
        // Pass the Webdriver test
        Object.defineProperty(navigator, 'webdriver', {
          get: () => false,
        });
        callback();
    };
    setProperty();

    Ерунда в том, что в Chrome вообще отсутствует переменная navigator.webdriver, в этом можно убедиться вводом navigator в консоли браузера, её там нет. Зато эта переменная есть в Firefox, но этот код её не меняет, т.е. он просто ничего не делает, значение переменной Firefox navigator.webdriver всегда равно true при запуске через selenium. В обычном (ручном) режиме она false.

    UPD. Не знаю, как проглядел, но в конечном итоге всё уперлось в проверку reCAPTCHA v3. Эта проверка проходится практически всегда при следующих условиях:
    1. Не используется User-Agent.
    2. Не используется прокси.
    3. Не отключаются уведомления.
    4. Не блокируются запросы на разрешения.
    4. Используется вот этот параметр:
    options.add_experimental_option("excludeSwitches", ['enable-automation'])

    Но при таких параметрах зарегистрировать более одного раза с одного IP не представляется возможным. Как я и указывал в своём вопросе - прокси использовал совершенно разные - от паблик до микро-серверов google cloud, так что дело не в "качестве" прокси а сугубо в факте его использования.
    Ответ написан
    Комментировать
  • Как составить план обучения и практики Python?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Читайте книги - пишите код. Всё. Не нужно никаких планов. Все эти "что мне учить, как мне учить, когда мне учить" и пр. - это всё отмазки лишь бы ничего не делать. Вы либо учите, либо нет.
    Ответ написан
    6 комментариев
  • Как сделать проверку на наличие записи в базе данных (SQLite)?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    cursor = db.execute('SELECT * FROM table_name WHERE (id IS ? AND name IS ?)', (id, name))
    row = cursor.fetchone()
    if row is None:
        cursor = db.execute('INSERT INTO table_name (id, name) VALUES (?,?)', (id, name))
        db.commit()
    Ответ написан
    1 комментарий
  • Как получить базу данных для собственного алгоритма рекомендаций?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Есть очень хороший API - The Movie Database, у него есть и русские описания и актеры и режиссеры и пр. Он бесплатный и в самом API есть огромное кол-во примеров, к тому же изначально у них возможна выборка по нужным вам параметрам.
    Лучше всего результаты выборки сохранять в локальную базу данных и просто со временем её увеличивать, а впоследствии уже делать основную выборку с нее и дополнять с TMD.
    Ответ написан
    2 комментария
  • Почему выдает ошибку в for event in longpoll.listen():?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Проверьте версию Long Poll API в настройках группы, поставьте самую последнюю (5.90, вроде-бы).
    Ответ написан
  • Vk Api python бот. Как исправить ошибку с VkBotLongPoll и VkBotEventType?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    [100] One of the parameters specified was missing or invalid: longpoll for this group is not enabled

    Зайди в настройки группы > API > Long Poll API > включить > выберите типы событий, которые будете использовать.
    Ответ написан
  • AsyncIO python как не ждать ответ от функции?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Для вашей задачи лучше подойдут потоки.
    from time import sleep
    from threading import Thread
    
    
    def first():
        sleep(3)
        print(2)
    
    
    def second():
        sleep(3)
        print(1)
        
    
    def main():
        Thread(target=first).start()
        Thread(target=second).start()
        print("Продолжаем")
    
    
    main()


    PS D:\Dropbox\Develop\all_tests> python threads.py
    Продолжаем
    1
    2
    Ответ написан
    8 комментариев
  • Сервер с минимальными ограничениями?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Бери любой избегая крупных хостеров (которые на 1-2 странице гугла). Обычно таким хостерам вообще всё-равно что ты там загружаешь, лишь бы не полный пи***ц.
    И да, на хостинге в любом случае лучше сильно не экономить. Если ты действительно не планируешь открывать adult-сайт, а просто есть вероятность, что пользователи что-то такое загрузят - то лучше научись это хоть как-то модерировать, если нет, то в любом случае бери нормальный хостинг и не беспокойся - никто ничто тебе не предъявит.
    А если всё-же adult-сайт, то как я и сказал - бери любой "не популярный" хостинг.
    Ответ написан
    2 комментария
  • Упаковка функции в строку, и обратно....?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    >>> def a():
    ...     print(True)
    ...
    >>> def b(func):
    ...     funcs = {'a': a()}
    ...     funcs[func]
    ...
    >>> b('a')
    True
    >>>

    Вы не потеряете производительность при вызове функции из словаря и на глаз вы точно не сможете определить где прямой вызов, а где из словаря.
    Уменьшать кол-во чтений хорошо тогда, когда их десятки, а то и сотни тысяч - в остальных случаях просто забейте. Когда у вас будет достаточно опыта и знаний вы сами будете прекрасно понимать где, как и что можно оптимизировать. До этого - просто пишите код и пробуйте. Любое решение хорошо, если оно работает так, как задумывалось, остальное - фантики.
    Ответ написан
    Комментировать
  • Как сравнивать None Python и NULL SQLite?

    kshnkvn
    @kshnkvn Автор вопроса
    yay ✌️ t.me/kshnkvn
    Решил проблему заменой оператора = на IS
    SELECT * FROM MATCHES WHERE (a IS ? AND b IS ? AND c IS ?)', (a, b, c)
    Ответ написан
    Комментировать
  • Python requests как правильно работать с proxy?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Во-первых:
    proxies = {
        'http': 'xxx.xx.xxx.xx:xxxx',
        'https': 'xxx.xx.xxx.xx:xxxx'
    }

    Во-вторых: вы заменяете User-Agent? По стандарту он 'python-requests' - многие сайты блокируют.
    В-третьих: если берете прокси из общего доступа, то он уже может быть заблокированным (на самом деле это довольно часто). Берите сразу большое кол-во прокси и пробуйте перебирать их примерно так:
    proxies = []
    for proxy in proxies:
        response = requests.get(proxies=proxy)
        if response.status_code == requests.codes['ok']:
            break
    
    response.text
    Ответ написан
  • Как чат-боту дождаться ответа пользователя?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    Ждать сообщение от конкретного ID. ID можно получить как из самого сообщения, так и другими способами в зависимости от используемой библиотеки, пример:
    def func(user_id):
        for event in long_poll.listen():
            if event.type == VkBotEventType.MESSAGE_NEW:
                if event.obj.from_id == user_id:
                    print('something')

    Только делать нужно это или асинхронно, или в отдельном потоке, иначе пока бот будет ждать сообщения от конкретного пользователя все другие он "не будет видеть".
    Т.е. вы получаете начальное сообщение, затем берете из него ID пользователя и с этим ID в отдельном потоке запускаете ожидание сообщения и далее делаете то, что хотите.
    Ответ написан
    3 комментария
  • Как совместить рандомные слова?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    import random
    
    a = ["Меч", "Карандаш", "Зуб"]
    b = ["Каменный", "Чистый", "Кристальный"]
    random_string = ' '.join([random.choice(a), random.choice(b)])
    print(random_string)


    >>> 'Меч Кристальный'
    Ответ написан
    1 комментарий