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

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

ただいまの
回答率

90.53%

  • Python 3.x

    9315questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • selenium

    672questions

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

  • Firefox

    234questions

    Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

  • Arch Linux

    11questions

    arch(アーク)は、バージョン管理システムです。 また、リポジトリ(アーカイブ)操作を行えるツールの総称として扱われています。

pythonのwebdriverでfirefoxを使う際にエラーが出てしまう

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 997

hukuda222

score 5

リモート先のArchLinuxからpythonのwebdriverでfirefoxを使ってスクレイピングをしようとしたのですが、以下のようなエラーが出てうまくいきませんでした。

 開発環境

Arch linux
python 3.6

 コマンド

sudo pacman -Sy --noconfirm unzip icu xorg-server-xvfb &&
sudo pacman -Sy --noconfirm firefox &&
wget https://github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-linux64.tar.gz -O g.tar.gz &&
yes|tar -zxvf g.tar.gz &&
rm -rf g.tar.gz &&
pip3 install selenium &&
pip3 install pyvirtualdisplay &&
python3 scrape.py

`

 ソースコード

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from pyvirtualdisplay import Display
from time import sleep

if __name__ == "__main__":
    display = Display(visible=0, size=(1024, 768))
    display.start()

    binary = FirefoxBinary("/usr/sbin/firefox")
    binary.add_command_line_options("-headless")
    cap = DesiredCapabilities().FIREFOX.copy()
    cap["marionette"] = False
    cap["firefox_binary"] = "/usr/sbin/firefox"
    driver = webdriver.Firefox(
        firefox_binary=binary,
        executable_path="./geckodriver", capabilities=cap)

    driver.get("https://www.google.com/")
    driver.close()
    display.stop()

 エラー文

Traceback (most recent call last):
  File "scrape.py", line 12, in <module>
    driver = webdriver.Firefox(executable_path="./geckodriver", capabilities=cap)
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py", line 184, in __init__
    self.binary, timeout)
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/firefox/extension_connection.py", line 52, in __init__
    self.binary.launch_browser(self.profile, timeout=timeout)
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 73, in launch_browser
    self._wait_until_connectable(timeout=timeout)
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 104, in _wait_until_connectable
    "The browser appears to have exited "
selenium.common.exceptions.WebDriverException: Message: The browser appears to have exited before we could connect. If you specified a log_file in the FirefoxBinary constructor, check it for details.

 追記

sudo pacman -Sy --noconfirm firefox firefox-adblock-plus firefox-noscript を実行することで上記のエラーは起こらなくなったのですが、代わりに以下のようなエラーが出るようになりました。このエラーの解決方法をご教授ください。

 エラー文

selenium.common.exceptions.WebDriverException: Message: Can't load the profile. Possible firefox version mismatch. 
You must use GeckoDriver instead for Firefox 48+. Profile Dir: /tmp/tmpvwp6fuam 
If you specified a log_file in the FirefoxBinary constructor, check it for details.
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

確かFierefoxだと、headlessではそのまま動かないと思います。

解決法としては、geckdriver(https://github.com/mozilla/geckodriver/issues/1159)を使う。

※この記事の中頃からが参考になります。
https://vaaaaaanquish.hatenablog.com/entry/2017/08/31/172020

もしくはFirefoxに特段のこだわりが無ければPhantomJSを使うのがオススメです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/21 19:09 編集

    ご回答ありがとうございます。geckodriverはすでに使っています。webdriver.Firefoxの引数にexecutable_pathとしてパスを記載しています。
    二つ目のリンク先の記事では同様のエラーが出ていますが、その記事と同様にbinary.add_command_line_optionsを使ってheadlessの指定をしているので関係ないのではないかと思います。
    また、firefoxにこだわりはないですが、PhantomJSはメンテナンスが終了しているのでできれば使わない方向で実装したいと考えています。

    キャンセル

  • 2018/08/22 20:57

    お、失礼いたしました。
    他の方法を考えてみます。

    キャンセル

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

  • Python 3.x

    9315questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • selenium

    672questions

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

  • Firefox

    234questions

    Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

  • Arch Linux

    11questions

    arch(アーク)は、バージョン管理システムです。 また、リポジトリ(アーカイブ)操作を行えるツールの総称として扱われています。