Bis zur Verwendung von PhantomJS mit Python auf Heroku

Da sich die Methode zum Aufrufen von PhantomJS zwischen der Entwicklungsumgebung und der Produktionsumgebung unterscheidet, wird sie nach dem Hostnamen sortiert.

Es ist überhaupt nicht unbedingt erforderlich, und es ist nur erforderlich, den Pfad zu übergeben, damit PhantomJS in der Entwicklungsumgebung verwendet werden kann. Aufgrund verschiedener Umstände konnte der Pfad jedoch nicht an die Entwicklungsumgebung übergeben werden. Daher werden wir ihn als vorläufige Maßnahme implementieren.

if os.uname()[1] == "local host name":
    driver = webdriver.PhantomJS(executable_path='/Applications/phantomjs-1.9.2-macosx/bin/phantomjs')
else:    
    driver = webdriver.PhantomJS()

Fehler bei der Ausführung

Als ich die obige Quelle auf Heroku hochgeladen und ausgeführt habe, ohne an irgendetwas zu denken, ist wie erwartet der folgende Fehler aufgetreten.

app[web.1]:     driver = webdriver.PhantomJS()
app[web.1]:   File "/app/.heroku/python/lib/python3.4/site-packages/selenium/webdriver/phantomjs/service.py", line 76, in start
app[web.1]:     raise WebDriverException("Unable to start phantomjs with ghostdriver: %s" % e)
app[web.1]: selenium.common.exceptions.WebDriverException: Message: Unable to start phantomjs with ghostdriver: [Errno 2] No such file or directory: 'phantomjs'

Als ich Heroku betrat und bestätigte, wurde PhantomJS nicht erstellt.

bash-3.2$ heroku run bash
Running bash on hogehoge... up, run.3889
~ $ pwd
/app
~ $ ls
app.py		 Procfile  python-stack    requirements.txt  views
ghostdriver.log  python    python-version  runtime.txt
~ $ PhantomJS
bash: PhantomJS: command not found
~ $ Phantomjs
bash: Phantomjs: command not found

Einstellungen für Heroku

Stellen Sie das Buildpack ein.

  1. $ heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
  2. touch .buildpacks
  3. echo "https://github.com/heroku/heroku-buildpack-python" >> .buildpacks
  4. echo "https://github.com/stomita/heroku-buildpack-phantomjs" >> .buildpacks

Laden Sie anschließend auf Heroku hoch.

bash-3.2$ git push heroku master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 335 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Fetching custom git buildpack... done
remote: -----> Multipack app detected
remote: =====> Downloading Buildpack: https://github.com/heroku/heroku-buildpack-python
remote: =====> Detected Framework: Python
remote: -----> Installing runtime (python-3.4.3)
remote: -----> Installing dependencies with pip
remote:        Collecting bottle==0.12.8 (from -r requirements.txt (line 1))
remote:          Downloading bottle-0.12.8.tar.gz (69kB)
remote:        Collecting Jinja2==2.8 (from -r requirements.txt (line 2))
remote:          Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB)
remote:        Collecting lxml==3.4.4 (from -r requirements.txt (line 3))
remote:          Downloading lxml-3.4.4.tar.gz (3.5MB)
remote:        Collecting MarkupSafe==0.23 (from -r requirements.txt (line 4))
remote:          Downloading MarkupSafe-0.23.tar.gz
remote:        Collecting selenium==2.48.0 (from -r requirements.txt (line 5))
remote:          Downloading selenium-2.48.0.tar.gz (805kB)
remote:        Collecting wheel==0.26.0 (from -r requirements.txt (line 6))
remote:          Downloading wheel-0.26.0-py2.py3-none-any.whl (63kB)
remote:        Installing collected packages: bottle, MarkupSafe, Jinja2, lxml, selenium, wheel
remote:          Running setup.py install for bottle
remote:          Running setup.py install for MarkupSafe
remote:          Running setup.py install for lxml
remote:          Running setup.py install for selenium
remote:        Successfully installed Jinja2-2.8 MarkupSafe-0.23 bottle-0.12.8 lxml-3.4.4 selenium-2.48.0 wheel-0.26.0
remote: 
remote: =====> Downloading Buildpack: https://github.com/stomita/heroku-buildpack-phantomjs
remote: =====> Detected Framework: PhantomJS
remote: -----> Extracting PhantomJS 1.9.8 binaries to /tmp/build_57462938b8344afe2a9119824547eac1/vendor/phantomjs
remote: -----> exporting PATH and LIBRARY_PATH
remote: Using release configuration from last framework (PhantomJS).
remote: -----> Discovering process types
remote:        Procfile declares types     -> renderer, web
remote:        Default types for Multipack -> console
remote: 
remote: -----> Compressing... done, 59.0MB
remote: -----> Launching... done, v8
remote:        https://hogehoge.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/hogehoge.git
   71335d7..c897730  master -> master

Wenn Sie sich remote bei Heroku anmelden, sehen Sie, dass ein "Vendor" -Ordner erstellt wurde.

bash-3.2$ heroku run bash
Running bash on hogehoge... up, run.6077
~ $ pwd
/app
~ $ ls
app.py		 Procfile  python-stack    requirements.txt  vendor
ghostdriver.log  python    python-version  runtime.txt	     views
~ $ 

Ich habe in diesem Zustand auf die URL zugegriffen und den Vorgang sicher bestätigt.

Recommended Posts

Bis zur Verwendung von PhantomJS mit Python auf Heroku
Bis Sie opencv mit Python verwenden können
Bis Python auf Apache läuft
Beachten Sie, bis Sie Emacs mit WSL verwenden
Verwenden Sie den Phantomjs-Webdriver von Selen mit Pythons Unittest
Beachten Sie, was Sie getan haben, um Flycheck mit Python zu verwenden
[Python] Verwenden Sie JSON mit Python
Scraping mit Python + PhantomJS
Bis Sie die Kaggle-API mit Colab verwenden
Verwenden Sie DynamoDB mit Python
Verwenden Sie Python 3.8 mit Anaconda
Verwenden Sie Python mit Docker
Bis die mit Flasche erstellte Webanwendung auf Heroku veröffentlicht (bereitgestellt) wird
Bis Python mit Pythonbrew installiert ist und Flask auf dem WSGI-Server ausgeführt wird
Scraping mit Python, Posting auf TwitterBot, regelmäßige Ausführung auf Heroku
Site-Hinweise zur Verwendung von NetworkX mit Python
Verwenden Sie die Trello-API mit Python
Verwenden Sie matplotlib unter Ubuntu 12 und Python
Verwenden Sie die Twitter-API mit Python
Verwenden Sie TUN / TAP mit Python
Verwenden Sie die Unterschall-API mit Python3
Verwenden Sie Python unter Windows (PyCharm)
Bis Sie mit Python unter Windows 7 eine maschinelle Lernumgebung erstellen und ausführen
Bis Sie Python Virtualenv unter Windows erstellen und Jupyter starten
Bis Sie Ihre eigene Python-Bibliothek mit pip installieren können
Verwenden Sie Python 3, das vom Befehlszeilentool unter macOS Catalina eingeführt wurde
Bis Sie das Python 3-System auf dem Sakura-Vermietungsserver verwenden (Verifizierungsumgebung erstellen) Teil 1 Vertrags-Anfangseinstellung
Verwenden Sie Numpy, Scipy, Scikit-Learn mit Heroku
Python: So verwenden Sie Async mit
Erstelle einen LINE-Bot mit Python + Heroku
Verwenden Sie eine Point Grey-Kamera mit Python (PyCapture2).
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Bis Sie Jupyter in Docker starten
Bis Sie Python in Docker einfügen
Verwenden Sie NAIF SPICE TOOL KIT mit Python
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
Verwenden Sie als nächstes Python (Flask) für Heroku!
Verwenden Sie rospy mit virtualenv in Python3
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Problem mit Python json.loads (), das str in Heroku zurückgibt
Verwenden Sie Python in pyenv mit NeoVim
Verwenden Sie Tensorflow 2.1.0 mit Anaconda unter Windows 10!
Verwenden Sie die Windows 10-Sprachsynthese mit Python
Bis Sie Google Colaboratory verwenden
Hinweise zur Verwendung von rstrip mit Python.
Verwenden Sie OpenCV mit Python 3 in Window
Bis zum Umgang mit Python in Atom
Erste Schritte mit Python 3.8 unter Windows
Sakura Verwenden von Python im Internet
Verwenden Sie PostgreSQL mit Lambda (Python + psycopg2)
Bis Sie den Rubin mit Renpy schütteln
Python | Was Sie mit Python machen können
[Memo] Tweet auf Twitter mit Python
Führen Sie Python regelmäßig auf Heroku Scheduler aus
So verwenden Sie Python in Pyenv unter MacOS mit PyCall
Ermitteln Sie mit Selenium + PhantomJS + Python die Breite des Div auf der Serverseite
Führen Sie das Servo mit Python unter ESP32 (Windows) aus.
Stellen Sie das Python-Gesichtserkennungsmodell für Heroku bereit und verwenden Sie es von Flutter ②