Задать вопрос
  • Что делать, если при парсинге selenium находит элемент, но выдает пустые строки?

    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()
    Ответ написан
    7 комментариев
  • При парсинге сайта, из-за большого количества запросов блокируется ip, как этого избежать?

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

    @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()
    Ответ написан
    1 комментарий
  • Написал на основе pydirectinput и pyqt5 простой антиафк, при нажатии кнопки запуск приложение вылетает, что делать?

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

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

    Что делать?
    а) start запускает второй поток, end его останавливает. Кури документацию к модулю threading.
    б) смотри, есть ли в PyQt способ запланировать вызов функции на следующей итерации оконного цикла/спустя некоторое время. В этом случае ты можешь раз за разом планировать вызов своей функции, которая реализует одну итерацию (гапример, шлёт одно нажатие кнопки). Поскольку её вызов будет выполняться средствами оконного цикла, а отрабатывать она будет быстро, это не помешает оконному циклу.
    Ответ написан
    1 комментарий