Python Seleniumとgeckodriverを使用して接続が拒否されました(OSエラー111)。

Python Seleniumとgeckodriverを使用して接続が拒否されました(OSエラー111)。

私はウェブスクレイピングが初めてです。以下に示すように、Debian BusterとFirefox GeckodriverでPythonを使用してプライベートアプリケーションを構築しています。サーバーはオンラインです。

firefox_binary = FirefoxBinary('/usr/bin/firefox')
opts = FirefoxOptions()
opts.add_argument("--headless")
driver = webdriver.Firefox(options=opts, firefox_binary=firefox_binary)
driver.get(url)

私の目標は、Webページでajax呼び出しを介してこのアプリケーションを起動することです。これはnginxサーバーなので、pyスクリプトはphp execコマンドから呼び出されます。

exec ('/usr/bin/python3 webdriver.py');

rootまたは他のユーザーとしてログインすると、Debianのコマンドラインで正しく機能します。 Webインターフェースを使用してスクリプトを呼び出すと、ユーザーはwww-dataで、次のエラーが発生します。接続が拒否されました(OSエラー111)。

3日間、すべてのインターネットリソースを検索し、可能なすべてを試しましたが、まだ解決策はありません。

この問題の解決策を知っていますか?

編集する:

  • セレンバージョン3.141.0

  • Mozilla Firefox 78.8.0esr

  • ゲッコドライバー0.29

  • www-dataユーザーのgeckodriver.log(エラーを含む):

    • 1614703595351 geckodriverについて127.0.0.1:53899で聞く
    • 1614703595556 mozrunner::runner INFO コマンドの実行: "/usr/bin/firefox" "--marionette" "--headless" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofile22XajP"
    • ***ヘッドレスモードで動作しています。
  • 管理者のgeckodriver.log(エラーなし):

    • 1614702846828 geckodriverについて 127.0.0.1:46897で聞く
    • 1614702847019 mozrunner::runner INFO コマンドの実行: "/usr/bin/firefox" "--marionette" "--headless" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofile7jTA4y"
    • ***ヘッドレスモードで動作しています。
    • 1614702859057マリオネットINFOリスニングポート45145
    • 1614702859109 Marionette WARN TLS証明書エラーは、このセッションでは無視されます。
    • JavaScript警告:https://.............js?v=1.2.7199.0、行119:returnステートメント以降のコードにアクセスできません。
    • JavaScript警告:https://.............js?v=1.2.7199.0、行119:returnステートメント以降のコードにアクセスできません。
    • 1614702872140マリオネット警告TimedPromiseが500ミリ秒後にタイムアウトしました:スタックトレース:
    • TimedPromise/<@chrome://marionette/content/sync.js:245:13
    • TimedPromise@chrome://marionette/content/sync.js:230:10
    • Interaction.flushEventLoop@chrome://marionette/content/interaction.js:416:10 webdriverClickElement@chrome://marionette/content/interaction.js:182:31
    • 1614702900530 Marionette INFO がポート 45145 でリッスンを停止しました。
  • geckodriver.log geckodriver 0.21のwww-データ:

    • 1614706982655 geckodriver 情報 geckodriver 0.21.0

    • 1614706982680 geckodriverについて127.0.0.1:33947で聞く

    • 1614706983553 mozrunner::runner INFO コマンドの実行: "/usr/bin/firefox" "-marionette" "--headless" "-foreground" "-no-remote" "-profile" "/tmp/rust_mozprofile.p37a7r0syAmR

    • ***ヘッドレスモードで動作しています。

    • (firefox-esr:22409): dconf-CRITICAL **:17:44:03.845: '/var/www/.cache/dconf' ディレクトリを作成できません: 権限が拒否されました。 dconf が正しく動作しません。

答え1

これは権限の問題です。 www-dataのホームディレクトリは/var/wwwで、通常はrootが所有しています。

/var/www を www-data に付与したり、権限の変更を制限したりするには、/var/www/.mozilla を作成し、所有権を www-data に変更できます。その後、スクリプトを再実行してみてください。

現在起こっているように見えるのは、Firefoxがユーザー設定を保存しようとしましたが失敗したことです。エラーは報告されておらず、基本プロセスは完全に中断されていませんが、まだgeckodriverと通信できないほど制限されています。

源泉:https://answers.launchpad.net/ubuntu/+question/695824

答え2

はい、うまくいきます。本当にありがとう

私は次のディレクトリを作成しました:/var/www/.cache /var/www/.mozilla

www-dataに書き込み権限を付与します。

これがセキュリティの問題ではないかと思います。おそらく、Mozillaの作業ディレクトリを別の場所に指定する方が良いかもしれません。

答え3

主な問題は.cacheフォルダであり、.mozilla権限が必要です。データは、スクリプトを実行しているユーザーのプロファイルに生成されます。

この解決策は私にとって効果的でした。

  1. キャッシュを保存する必要があるユーザーを決定します。私が知っている限り、そうです。 www-データ(ユーザー交響楽団)。私はフォルダをチェックインしました/tmp//tmp/Temp-276cddf8-d7c5-4a09...Firefoxで作成されたものと同じフォルダの所有者を表示できます。

  2. /etc/passwdユーザーに bash 権限が必要なので、次のファイルのサイズを変更する必要がありwww-data:33:33:www-data:/usr/sbin:/usr/sbin/nologinます。www-data:x:33:33:www-data:**/var/www**:**/bin/bash**
  3. 私の場合、パスにフォルダを作成します/var/www/(パスはファイルで指定されたユーザーパスにあります/etc/passwd)。

mkdir /var/www/.cache

mkdir /var/www/.mozilla

chown www-data:www-data .cache

chown www-data:www-data .mozilla


@sdragnevの答えは正しいですが、私の場合はまだユーザーにbash権限を付与する必要があります。

関連情報