jerwright
@jerwright
while True: coding()

Почему не получается использовать selenium с Heroku?

Недавно столкнулся с проблемой. Создал парсер на selenium и bs4. Мне нужно было, чтобы через selenium бот смог нажать на кнопку "Загрузить ещё". У меня на компьютере код отрабатывается отлично, но в случае с Heroku выдаёт ошибки.

Ссылка на страницу: https://vstup.osvita.ua/y2021/r5/111/848151/

Ошибки:
1) Эта ошибка появляется при включении программы Heroku. 2021-07-21T06:24:27.787246+00:00 app[worker.1]: /app/.heroku/python/lib/python3.9/site-packages/selenium/webdriver/firefox/firefox_profile.py:208: SyntaxWarning: "is" with a literal. Did you mean "=="?
2021-07-21T06:24:27.787261+00:00 app[worker.1]: if setting is None or setting is '':

2) Эта ошибка появляется после выполнения команды.
2021-07-21T06:31:42.821687+00:00 app[worker.1]: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[7]/div/div/div[3]/span"}
2021-07-21T06:31:42.821695+00:00 app[worker.1]: (Session info: headless chrome=91.0.4472.164)

Код:
def do_abitcheck(message, fio, URL=None):
    chrome_options = webdriver.ChromeOptions()
    chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
    chrome_options.add_argument("--headless")
    chrome_options.add_argument("--disable-dev-shm-usage")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--proxy-server=138.128.91.65:8000")
    driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), options=chrome_options)

    try:
        driver.get(url=URL)
        time.sleep(2)
        driver.refresh()
        time.sleep(3)
        more_button = driver.find_element_by_xpath('/html/body/div[7]/div/div/div[3]/span')
        more_button.click()
        time.sleep(1)
    except UnexpectedAlertPresentException as ex:
        return bot.send_message(message.chat.id, "Виникла помилка під час підключення до сайту через постійних спроб зі сторони боту. Зачекайте, будь ласка, та спробуйте ще раз.")
    except Exception as ex:
        print(ex)
        return bot.send_message(message.chat.id, 'Виникла помилка під час підключення до сайту. Можливо, сторінка не була знайдена. Спробуйте ще раз та перевірте посилання.')
    finally:
        time.sleep(4)
        needed_html_code = driver.page_source
        driver.close()
        driver.quit()


Ошибки возникают из-за неудачной попытки нажать на кнопку, но на локальном компьютере они не возникают.

Переменная needed_html_code отвечает за копирование htmk кода страницы после того, как появляются другие колонки на сайте за счёт нажатия на кнопку.

Что можно изменить в данной ситуации или же можно как-то заставить бота нажать на кнопку сайта через beautifulsoup4 или requests и скопировать появившиеся колонки?
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Во-первых, не стоит использовать проверку на идентичность там, где нужна проверка на эквивалентность. Во-вторых, когда не срабатывает селектор, стоит логировать содержимое страницы. Скорее всего, сайт разрабатывал не совсем дурак, поэтому на нём есть защита от парсеров, возвращающая страницу-заглушку на запрос с Heroku.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nmkru
@nmkru
beginner python programmer
Удалось решить проблему?
Тоже вылетает первая ошибка на Heroku
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 10:01
500 руб./за проект
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час