Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
Bubunduc

Данила Румянцев

  • 0
    вклад
  • 12
    вопросов
  • 5
    ответов
  • 80%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Как из дочернего процесса вытащить данные?

    Vindicar
    Vindicar @Vindicar
    Попробуй использовать Pool.map().
    Пример его использования буквально в самом начале официальной документации.
    Ответ написан 20 апр.
    2 комментария
    2 комментария
  • Как убрать ограничение в 500 результатов в gmailAPI для python?

    SoreMix
    soremix @SoreMix Куратор тега Python
    yellow
    Никак, ограничение гугла. Получаете 500 сообщений, достаете из ответа токен следующей страницы, вызываете этот метод опять, добавив параметр pageToken со значением, которое получили.

    как-то так вроде
    messages = []
    next_page_token = None
    
    for _ in range(3):
        if next_page_token:
            msgs = service.users().messages().list(userId='me',maxResults=500, pageToken=next_page_token).execute()
        else:
            msgs = service.users().messages().list(userId='me',maxResults=500).execute()
    
        messages.extend(msgs)
        next_page_token = msgs['nextPageToken']
    Ответ написан 19 апр.
    3 комментария
    3 комментария
  • Многопоточность vs асинхронность?

    pazukdev
    pazukdev @pazukdev
    Java Dev
    Многопоточность vs асинхронность

    Ресторан. Клиент заказал яичницу и гренки. 

    1. Синхронное выполнение: даем задание 1 повару. Он сначала делает яичницу. После того как она готова он приступает к гренкам.

    2. Асинхронное выполнение (многопоточность): даем задание 2 поварам. Они приступают условно одновременно. Один делает яичницу, второй гренки и оба конфликтуют из-за доступа к общим ресурсам (перцу, соли, сковородке).

    3. Асинхронное выполнение (1 поток): даем задание 1 повару. Он ставит на плиту яичницу и ставит таймер. Ставит гренки и тоже ставит таймер. Пока таймеры не сработали, чтобы не терять время, прибирает кухню. После того как сработают оба таймера - отдает заказ.
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Как читать документацию discord.py?

    Ukrainskiy
    Ukrainskiy @Ukrainskiy
    Читать можно глазами, например. Документация тут - https://discordpy.readthedocs.io/en/stable/
    Ответ написан 20 янв.
    2 комментария
    2 комментария
  • Почему Сайт не видит отправленые сообщения?

    Vindicar
    Vindicar @Vindicar
    Причины может быть две.
    1. .tiktok-19dw2t5-DivLayoutContainer выглядит как сгенерированное имя стиля, оно может меняться хоть при каждом открытии страницы.
    2. Более вероятно, аккаунт бота был тихо помечен как спамерский, и теперь его сообщения видит только он сам. Учитывая действия бота, заслуженно, скорее всего.
    Ответ написан 16 янв.
    3 комментария
    3 комментария
  • Как парсить именно последнее появившееся сообщение?

    ScriptKiddo
    ScriptKiddo @ScriptKiddo
    (//p[@class='message-text'])[last()]

    last - возвращает индекс последнего элемента в наборе
    Ответ написан 16 янв.
    2 комментария
    2 комментария
  • Как написать сообщение с помощью selenium, если в html коде нету тега input?

    Vindicar
    Vindicar @Vindicar
    Можно попробовать так:
    pseudo_input = driver.find_element_by_css_selector(".btn") # ну или что там у тебя за элемент
    ( selenium.webdriver.common.action_chains.ActionChains(driver)
        .move_to_element(pseudo_input)
        .click(pseudo_input)
        .send_keys_to_element(pseudo_input, *keys_to_send)
        .perform()
    )
    Ответ написан 16 янв.
    2 комментария
    2 комментария
  • Что делать, если при парсинге selenium находит элемент, но выдает пустые строки?

    SoreMix
    soremix @SoreMix Куратор тега Python
    yellow
    Поле .text возвращает только видимый текст. Здесь же он появляется после наведение курсора. Здесь текст нужно достать через метод get_attribute('textContent')
    И еще, мне кажется, что лучше парсить каждый блок отдельно. Тогда все будет на месте и никакой путанницы.
    Вообще, все адреса лежат в JS скрипте

    self.shops = self.driver.execute_script('return shopsObj')
    for shop in self.shops:
        print(shop['address'], shop['availability_hint'])


    old
    Сначала найти все строки, которые содержат информацию о магазине:
    self.shops = self.driver.find_elements(By.XPATH, '//div[@class="b-shops-map__shop _other"]')


    В цикле к каждому обратиться и достать нужную инфу:
    self.shops = self.driver.find_elements(By.XPATH, '//div[@class="b-shops-map__shop _other"]')
    
    for shop in self.shops:
        print(shop.find_element_by_class_name('b-shops-map__address-text').text)
        print(shop.find_element_by_class_name('b-shops-map__availability-col-wrapper').find_element_by_class_name('b-tooltip-new__text.s-tooltip-text').get_attribute('textContent').strip())
        print()
    Ответ написан 26 дек. 2021
    7 комментариев
    7 комментариев
  • При парсинге сайта, из-за большого количества запросов блокируется ip, как этого избежать?

    rrambo @rrambo
    Да никак не избежать. Либо прокси, либо увеличивать паузу между запросами.. можно же подождать. Закинуть на сервер и пусть работает себе
    Ответ написан 02 нояб. 2021
    1 комментарий
    1 комментарий
  • Почему не срабатывает кнопка pyqt5?

    PRoGRamm_InG @PRoGRamm_InG
    Ты забыл добавить функцию add_functionts в retranslateUi()

    Правильный вариант:
    spoiler
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "АнтиАфк"))
        self.btn_start.setText(_translate("MainWindow", "Запуск"))
        add_functionts()
    Ответ написан 31 авг. 2021
    1 комментарий
    1 комментарий
  • Написал на основе pydirectinput и pyqt5 простой антиафк, при нажатии кнопки запуск приложение вылетает, что делать?

    Vindicar
    Vindicar @Vindicar
    Приложение просто не отвечает после нажатия кнопки 'Запуск'(функция start)

    Ну а что, логично. Читай как устроены оконные приложения, это же азы рабоыт с любым GUI.
    Если кратко, у них в основе цикл, который принимает сообщения от ОС (нажата клавиша, сдвинута мышь, и т.д.) и обрабатывает их.
    PyQT реализует этот цикл сам, ты имеешь дело только с обработчиками событий - но цикл от этого никуда не девается. Всё происходит в одном потоке, так что пока обработчик события работает - цикл стоит, следующие сообщения ждут очереди.
    Так что когда ты делаешь while self.gag==True:, твой обработчик никогда не выйдет из цикла while, никогда не передаст управление оконному циклу, и щелчок по кнопке end никогда не будет обработан (кк и любое другое событие).

    Что делать?
    а) start запускает второй поток, end его останавливает. Кури документацию к модулю threading.
    б) смотри, есть ли в PyQt способ запланировать вызов функции на следующей итерации оконного цикла/спустя некоторое время. В этом случае ты можешь раз за разом планировать вызов своей функции, которая реализует одну итерацию (гапример, шлёт одно нажатие кнопки). Поскольку её вызов будет выполняться средствами оконного цикла, а отрабатывать она будет быстро, это не помешает оконному циклу.
    Ответ написан 21 авг. 2021
    1 комментарий
    1 комментарий
Оценили как «Нравится»
Самые активные сегодня
  • rPman
    • 9 ответов
    • 0 вопросов
  • Drno
    • 7 ответов
    • 0 вопросов
  • низкомолекулярный макрос
    • 6 ответов
    • 1 вопрос
  • 0xD34F
    0xD34F
    • 6 ответов
    • 0 вопросов
  • ALonUa
    • 6 ответов
    • 0 вопросов
  • sergey-kuznetsov
    Сергей Кузнецов
    • 5 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации