質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

解決済

ptyhon内に記述したseleniumのwebdriver.Firefox()が、apacheで実行すると"connection refused"のエラーになってしまう

k-zil
k-zil

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

2回答

1評価

0クリップ

4254閲覧

投稿2019/04/11 12:39

編集2022/01/12 10:58

前提・実現したいこと

python(Django)でウェブスクレイピングのシステムを構築中です。
スクレイピングの対象サイトが主にjavascriptで構築されているため、seleniumを使ってデータを取得することにしました。
一通りコードを書き終わり、SSHからコマンドで実行すると上手く動作したのですが、ブラウザからコードを実行させると"connection refused"のエラーとなり実行できません。
なお、"connection refused"はDjangoが吐き出したエラーです。
Djangoのデバッグ画面のTracebackを見ると、webdriver.Firefox()の起動のところでこのエラーになっていました(下記)。
ブラウザからDjangoを実行するのは WSGI+apacheを使っています。

ブラウザ上で動作するウェブサービスの一部としてこのスクレイピングが必要なので、SSHのコマンドで上手くいっても意味はなく、ブラウザからのリクエストをトリガーとして動作させたいので、このエラーを解決したいです。

発生している問題・エラーメッセージ

Message: connection refused Request Method: POST Request URL: https://example.com/django/my_project/my_app/target-path/ Django Version: 2.1 Exception Type: WebDriverException Exception Value: Message: connection refused Exception Location: /home/hogehoge/pyenv/lib64/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py in check_response, line 242 Python Executable: /home/hogehoge/pyenv/bin/python Python Version: 3.6.5 Python Path: ['/usr/lib64/python36.zip', '/usr/lib64/python3.6', '/usr/lib64/python3.6/lib-dynload', '/home/hogehoge/pyenv/lib64/python3.6/site-packages', '/home/hogehoge/pyenv/lib/python3.6/site-packages', '/home/hogehoge/pyenv/my_project', '/home/hogehoge/pyenv/my_project/my_project'] Traceback /home/hogehoge/pyenv/my_project/my_app/scraper.py in get_content driver = webdriver.Firefox(executable_path=geckodriver_path, log_path=os.path.devnull, options=options) /home/hogehoge/pyenv/lib64/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py in __init__ keep_alive=True) /home/hogehoge/pyenv/lib64/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in __init__ self.start_session(capabilities, browser_profile) /home/hogehoge/pyenv/lib64/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in start_session response = self.execute(Command.NEW_SESSION, parameters) /home/hogehoge/pyenv/lib64/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in execute self.error_handler.check_response(response) /home/hogehoge/pyenv/lib64/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py in check_response raise exception_class(message, screen, stacktrace)

該当のソースコード

python

geckodriver_path = "/usr/local/bin/geckodriver" options = Options() options.set_headless(Options.headless) #実行ユーザー確認 import getpass import pwd userid = os.getuid() getuser = getpass.getuser() environUser = os.environ.get("USER") getpwuid = pwd.getpwuid(os.getuid())[0] driver = webdriver.Firefox(executable_path=geckodriver_path, log_path=os.path.devnull, options=options)

試したこと

SSHのコマンドから実行して正常に動作するときは、上記のユーザーに関する変数は、
userid = 1000
getuser = 'hogehoge'
environUser = 'hogehoge'
getpwuid = 'hogehoge'
という具合にユーザー情報が入ります。

一方、上記のエラーとなるブラウザから実行した場合は、これらの変数は、
userid = 48
getuser = 'apache'
environUser = None
getpwuid = 'apache'
となります。

この実行ユーザーの差が原因ではないかと思っているのですが、原因の箇所が、seleniumにあるのか、webdriverにあるのか、WSGIにあるのか、apacheにあるのか、googleで検索してもそれ以上のヒントが見つけられず、ここで質問させていただいた次第です。

解決の方向性や切り分け方法などヒントをいただけると大変ありがたいです。
よろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

サーバ環境:さくらVPS(centOS 7.5)
Python:3.6.5
Django :2.1
mod-wsgi 4.6.4

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。