2013-04-09 4 views
11

Я очищаю некоторые веб-сайты, которые, похоже, имеют довольно хорошую защиту от него. Единственный способ заставить его работать - это использовать Selenium для загрузки страницы, а затем очистить материал от этого.Запуск браузера селена на сервере (Flask/Python/Heroku)

В настоящее время это работает на моем локальном компьютере (окна firefox открывается и закрывается, когда я обращаюсь к своей странице, и HTML обрабатывается далее в моем сценарии). Однако мне нужен мой скребок для доступа в Интернете. Скребок встроен в приложение Flask на Heroku. Есть ли способ заставить браузер Selenium работать на серверах Heroku? Или есть хостинг-провайдеры, где он может работать?

ответ

11

Heroku, замечательный как есть, имеет большое ограничение в том, что нельзя использовать специальное программное обеспечение или во многих случаях библиотеки. Предоставляя простой в использовании управляемый пакет с центральным управлением, Heroku удаляет свои серверы, чтобы предотвратить другое использование.

Что это сводится к тому, что Xorg не существует на динаре Heroku. Отсутствие Xorg и отсутствие возможности устанавливать пользовательское программное обеспечение означает отсутствие xvfb, а также отсутствие возможности запуска браузера, которого ожидает селен. Кроме того, браузер обычно недоступен.

Вам повезет с облачным предложением, например AWS, где вы можете установить собственное программное обеспечение, в том числе firefox, xvfb (чтобы не потребоваться все служебные расходы Xorg) и, конечно же, остальную часть вашего скребкового стека. This answer объясняет, как это сделать правильно.

1

Есть сборные, чтобы селен работал на героку.

Добавить ниже комплекты.

1) heroku buildpacks:add https://github.com/kevinsawicki/heroku-buildpack-xvfb-google-chrome/ 
2) heroku buildpacks:add https://github.com/heroku/heroku-buildpack-chromedriver 

и установить Heroku стек в кедр-14, как показано ниже, а Xvfb buildpack работает только с кедром-14.

heroku stack:set cedar-14 -a stocksdata 

Затем указать местоположение хром Google, как показано ниже

options = ChromeOptions() 
options.binary_location = "/app/.apt/usr/bin/google-chrome-stable" 
driver = webdriver.Chrome(chrome_options=options) 
Смежные вопросы