Недавно столкнулся с проблемой. Создал парсер на 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 и скопировать появившиеся колонки?