CoderCastrov logo
CoderCastrov
Heroku развертывание

Настройка скрапера на основе Selenium для развертывания на Heroku.

Настройка скрапера на основе Selenium для развертывания на Heroku.
просмотров
2 мин чтение
#Heroku развертывание

Руководство по скрапингу на Heroku

Poster of Heroku

Этот пост написан в качестве руководства, чтобы помочь тем, кто хочет развернуть скрипт на языке Python, использующий веб-драйверы Selenium. Предполагается, что у вас уже есть работающий скрипт на локальной среде, и у вас есть зарегистрированная учетная запись Heroku, но при попытке загрузить код на ваш сервер Heroku возникает ошибка. Ниже приведена информация, которая поможет вам решить проблему.

Исходный код на локальной среде.

Ниже приведен код, который я использовал для импорта и настройки безголового драйвера Selenium на моей локальной среде. Этот код работал нормально на моей локальной среде, но при запуске кода на Heroku возникала ошибка FileNotFoundError для "chrome_driver_path".

from tl import post_document_to_tl_channel, post_photo_to_tl_channel
from selenium import webdriver
from selenium.webdriver.chrome.options import Optionschrome_driver_path = "./chromedriver.exe"
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')driver = webdriver.Chrome(executable_path=chrome_driver_path, options=chrome_options)

Решение

Для решения возникшей ошибки FileNotFoundError, связанной с конфигурацией динамических серверов Heroku, необходимо добавить сборки для Google Chrome и Chrome Driver в настройки проекта Heroku.

Для этого нужно добавить соответствующие URL-адреса сборок в список сборок, как показано на изображении ниже.

Snapshot of my project’s build packs
URL-адреса сборок
[https://github.com/heroku/heroku-buildpack-google-chrome](https://github.com/heroku/heroku-buildpack-google-chrome)
[https://github.com/heroku/heroku-buildpack-chromedriver](https://github.com/heroku/heroku-buildpack-chromedriver)

Затем нам потребуется внести некоторые основные изменения в настройку нашего драйвера Selenium. Пример изменений кода приведен ниже. В коде вы заметите использование переменных среды "CHROMEDRIVER_PATH" и "GOOGLE_CHROME_BIN".

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")
driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), options=chrome_options)

Вам потребуется только установить путь к "CHROMEDRIVER_PATH" в разделе env вашего проекта Heroku, поскольку "GOOGLE_CHROME_BIN" будет установлен автоматически при установке сборки.

Установите "CHROMEDRIVER_PATH" равным "/app/.chromedriver/bin/chromedriver".

Загрузка кода

Перед загрузкой вашего кода крайне важно создать файлы requirements.txt и Procfile. Файл requirements.txt будет содержать библиотеки, используемые в проекте, и их версии, а файл Procfile будет содержать команды о том, как запустить написанный вами скрипт.

Файл requirements.txt можно создать, запустив следующую команду.

pip freeze > requirements.txt

Ниже приведен пример содержимого моего файла requirements.txt для этого проекта.

bs4==0.0.1
gcloud==0.18.3
lxml==4.6.2
pycrypto==2.6.1
python-jwt==3.3.0
sseclient==0.0.27
firebase==3.0.1
pymongo==3.11.3
dnspython==2.1.0
requests-toolbelt==0.8.0
pillow==8.3.2
selenium==3.141.0

Содержимое файла Procfile.

worker: python main.py

Надеюсь, этот пост помог вам решить ваши проблемы. Если да, то поставьте этой статье лайк. Счастливого программирования 😎.

Clap