Python Selenium WebDriver разлогирование каждые 3 часа

Рейтинг: 0Ответов: 1Опубликовано: 15.02.2023

Помогите разобраться, произвожу парсинг СРМ на наличие новых задач. Все работает нормально и пуши летят в телеграмм бот, но через каждые 3 часа происходит разлогирование. Мне пока не удалось понять почему это происходит.Подскажи возможно кто то с таким сталкивался? Есть идея написать метод на проверку разлогирование страницы но это костыльный вариант решения проблемы. Так же буду рад если дадите рекомендации по проблеме и по коду в целом. Спасибо.

options = webdriver.ChromeOptions()
options.add_argument(arg)

# disable webdriver mode
options.add_argument("--disable-blink-features=AutomationControlled")
# headless mode
# options.headless = True

pathDriver = Service(pathDriverChrome)
driver = webdriver.Chrome(service=pathDriver, options=options)

sec_utc = time.time()

log_path = PathManager.get('logs/debugCRM.log')
logger.add(log_path, format="{time} {level} {message}", level="DEBUG", rotation="10:00", compression="zip")


try:
    driver.get(url)
    time.sleep(1)

    # Find the id/name/class of username by inspecting on username input
    driver.find_element(By.NAME, "USER_LOGIN").send_keys(setting.bots.login)
    logger.info('Логин введен')
    time.sleep(1)

    # find the password by inspecting on password input
    driver.find_element(By.NAME, "USER_PASSWORD").send_keys(setting.bots.password)
    logger.info('Пароль введен')
    time.sleep(1)

    # Send_Key_Enter
    driver.find_element(By.NAME, "USER_PASSWORD").send_keys(Keys.ENTER)
    logger.info('Пользователь авторизован')
    time.sleep(1)

except Exception as ex:
    logger.info(ex)


def checkFormCall():
    try:
        elem = driver.find_element(By.XPATH, '//*[@id="popup-window-content-im-phone-call-view"]/div/div[2]/div/div[7]/span')
        elem.click()
        logger.info('Форма вызова была закрыта')
    except NoSuchElementException:
        logger.info('Форма вызова на странице не найдена')
        return False


@logger.catch
def parsPage():

    for k, v in data.items():
        logger.info('*****************START*****************')
        logger.info('Итерация словаря начата')
        checkFormCall()
        try:

            checkFormCall()
            driver.find_element(By.PARTIAL_LINK_TEXT, "Сделки").click()
            time.sleep(1)
            logger.info('Переход в сделки')
            time.sleep(2)

            checkFormCall()
            logger.info(f'Выбираем из списка фильтр пользователя: {k}')
            driver.find_element(By.ID, "CRM_DEAL_LIST_V12_C_0_search").click()
            time.sleep(1)
            logger.info('Нажимаем на поиск')
            time.sleep(2)

            checkFormCall()
            driver.find_element(By.XPATH, v).click()
            time.sleep(1)
            logger.info('Выбор фильтра на странице:')
            logger.info(f'Фильтр {k}, XPATH {v}')
            time.sleep(2)

        except Exception as ex:
            logger.info(ex)

        html_source_code = driver.page_source
        html_soup: BeautifulSoup = BeautifulSoup(html_source_code, 'html.parser')

        ReportFile = dirHtmlFiles + k + '.html'
        with open(ReportFile, 'w') as file:
            file.write(str(html_soup))
            logger.info(f'Пользователь: {k}' + f' Сохраняю страницу: {ReportFile}')
        time.sleep(3)
        logger.info('Итерация словаря закончена')
        logger.info('*****************STOP*****************')
        file.close()

def whileStart():
    schedule.every(50).seconds.do(parsPage)
    while True:
        time.sleep(20)
        schedule.run_pending()
        logger.info('Ожидаю итерацию')


if __name__ == '__main__':
    whileStart()

Логи

2023-02-16T10:04:39.747912+0300 INFO __main__ Bot starts 
2023-02-16T10:05:44.449133+0300 INFO Логин введен
2023-02-16T10:05:45.528080+0300 INFO Пароль введен
2023-02-16T10:05:47.736548+0300 INFO Пользователь авторизован
2023-02-16T10:06:07.754254+0300 INFO Ожидаю итерацию
2023-02-16T10:06:27.763708+0300 INFO Ожидаю итерацию
2023-02-16T10:06:47.782249+0300 INFO *****************START*****************


    2023-02-16T13:05:57.177004+0300 INFO Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="CRM_DEAL_LIST_V12_C_0_search"]"}
  (Session info: chrome=110.0.5481.77)
Stacktrace:
#0 0x55ee68901303 <unknown>
#1 0x55ee686d5d37 <unknown>
#2 0x55ee687125b2 <unknown>
#3 0x55ee687126c1 <unknown>
#4 0x55ee6874cb34 <unknown>
#5 0x55ee687329ad <unknown>
#6 0x55ee6874a88c <unknown>
#7 0x55ee68732753 <unknown>
#8 0x55ee68705a14 <unknown>
#9 0x55ee68706b7e <unknown>
#10 0x55ee6895032e <unknown>
#11 0x55ee68953c0e <unknown>
#12 0x55ee68936610 <unknown>
#13 0x55ee68954c23 <unknown>
#14 0x55ee68928545 <unknown>
#15 0x55ee689756a8 <unknown>
#16 0x55ee68975836 <unknown>
#17 0x55ee68990d13 <unknown>
#18 0x7f266a259b43 <unknown>

Ответы

▲ 1

Решение:

@logger.catch
def checkLogoffPage():
    try:
        driver.find_element(By.XPATH, '//*[@id="login-popup"]/div/div[1]')
        logger.info('Повторная авторизация')
        # Вызываю метод авторизации 
        LoginToCrm()
    except NoSuchElementException:
        logger.info('Авторизация не требуется')
        return False