前提・実現したいこと
Jupyter labで、ストレイピングができるように、勉強をしています。
(参考動画:https://www.youtube.com/watch?v=LgZ8Li97yoM)
そこでchromedriverのPATHが通らず
webdriver.Chrome()
が実行できません。
*Macを使っています。
発生している問題・エラーメッセージ
追記↓
5
1###⑤のエラーメッセージ### 2OSError Traceback (most recent call last) 3<ipython-input-10-89af866da0ea> in <module> 4 1 # Mac 5 2 #browser = webdriver.Chrome() 6----> 3 browser = webdriver.Chrome(executable_path='/workspace/chromedriver') 7 4 # Chromedriverが見つかるまでの待ち時間を設定 8 5 #browser.implicitly_wait(3) 9 10~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py in __init__(self, executable_path, port, options, service_args, desired_capabilities, service_log_path, chrome_options, keep_alive) 11 71 service_args=service_args, 12 72 log_path=service_log_path) 13---> 73 self.service.start() 14 74 15 75 try: 16 17~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/common/service.py in start(self) 18 74 stdout=self.log_file, 19 75 stderr=self.log_file, 20---> 76 stdin=PIPE) 21 77 except TypeError: 22 78 raise 23 24~/anaconda3/lib/python3.7/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text) 25 773 c2pread, c2pwrite, 26 774 errread, errwrite, 27--> 775 restore_signals, start_new_session) 28 776 except: 29 777 # Cleanup if the child failed starting. 30 31~/anaconda3/lib/python3.7/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session) 32 1520 if errno_num == errno.ENOENT: 33 1521 err_msg += ': ' + repr(err_filename) 34-> 1522 raise child_exception_type(errno_num, err_msg, err_filename) 35 1523 raise child_exception_type(err_msg) 36 1524 37 38OSError: [Errno 8] Exec format error: '/workspace/chromedriver'
3
1###③,④のエラーメッセージ### 2WebDriverException Traceback (most recent call last) 3<ipython-input-33-73642a135d06> in <module> 4 1 # Mac 5----> 2 browser = webdriver.Chrome() 6 3 # Chromedriverが見つかるまでの待ち時間を設定 7 8~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py in __init__(self, executable_path, port, options, service_args, desired_capabilities, service_log_path, chrome_options, keep_alive) 9 71 service_args=service_args, 10 72 log_path=service_log_path) 11---> 73 self.service.start() 12 74 13 75 try: 14 15~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/common/service.py in start(self) 16 96 count = 0 17 97 while True: 18---> 98 self.assert_process_still_running() 19 99 if self.is_connectable(): 20 100 break 21 22~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/common/service.py in assert_process_still_running(self) 23 109 raise WebDriverException( 24 110 'Service %s unexpectedly exited. Status code was: %s' 25--> 111 % (self.path, return_code) 26 112 ) 27 113 28 29WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 127
1
1###当初〜②のエラーメッセージ### 2FileNotFoundError Traceback (most recent call last) 3~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/common/service.py in start(self) 4 75 stderr=self.log_file, 5---> 76 stdin=PIPE) 6 77 except TypeError: 7 8~/anaconda3/lib/python3.7/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text) 9 774 errread, errwrite, 10--> 775 restore_signals, start_new_session) 11 776 except: 12 13~/anaconda3/lib/python3.7/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session) 14 1521 err_msg += ': ' + repr(err_filename) 15-> 1522 raise child_exception_type(errno_num, err_msg, err_filename) 16 1523 raise child_exception_type(err_msg) 17 18FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver': 'chromedriver' 19 20During handling of the above exception, another exception occurred: 21 22WebDriverException Traceback (most recent call last) 23<ipython-input-50-73642a135d06> in <module> 24 1 # Mac 25----> 2 browser = webdriver.Chrome() 26 3 # Chromedriverが見つかるまでの待ち時間を設定 27 28~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/chrome/webdriver.py in __init__(self, executable_path, port, options, service_args, desired_capabilities, service_log_path, chrome_options, keep_alive) 29 71 service_args=service_args, 30 72 log_path=service_log_path) 31---> 73 self.service.start() 32 74 33 75 try: 34 35~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/common/service.py in start(self) 36 81 raise WebDriverException( 37 82 "'%s' executable needs to be in PATH. %s" % ( 38---> 83 os.path.basename(self.path), self.start_error_message) 39 84 ) 40 85 elif err.errno == errno.EACCES: 41 42WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
該当のソースコード
Python
1!pip install selenium 2!pip install beautifulsoup4 3 4from selenium import webdriver 5import chromedriver_binary # ←追加 6import time 7import pandas as pd 8 9browser = webdriver.Chrome()
↓以下、Dockerfileの内容です
Dockerfile
1FROM ubuntu:latest 2 3RUN apt-get update && apt-get install -y sudo wget vim curl gawk make gcc 4 5RUN wget https://repo.continuum.io/archive/Anaconda3-2019.03-Linux-x86_64.sh && \ 6 sh Anaconda3-2019.03-Linux-x86_64.sh -b && \ 7 rm -f Anaconda3-2019.03-Linux-x86_64.sh && \ 8 sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo bash - && \ 9 sudo apt-get install -y nodejs 10 11ENV PATH $PATH:/root/anaconda3/bin 12 13RUN pip install --upgrade pip 14RUN pip install pandas_datareader 15RUN pip install mplfinance 16 17RUN wget --quiet http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -O ta-lib-0.4.0-src.tar.gz && \ 18 tar xvf ta-lib-0.4.0-src.tar.gz && \ 19 cd ta-lib/ && \ 20 ./configure --prefix=/usr && \ 21 make && \ 22 sudo make install && \ 23 cd .. && \ 24 pip install TA-Lib && \ 25 rm -R ta-lib ta-lib-0.4.0-src.tar.gz 26 27RUN mkdir /workspace 28 29CMD ["jupyter-lab", "--ip=0.0.0.0","--port=8888" ,"--no-browser", "--allow-root", "--LabApp.token=''"]
試したこと
追記
⑤ executable_pathをマウントしたDocker側のディレクトリで、指定できていないようだったので、
- 一度homebrewでchromedriverをアンインストールして、HPからダウンロードし直し、
- デスクトップでマウントしたディレクトリに、chromedriverを移し、
- executable='/workspace/chromedriver'と指定したところ、
→結果:OSError: [Errno 8] Exec format error: '/workspace/chromedriver'
が返ってきました。
④ https://watlab-blog.com/2019/08/10/chromedriver-path/を参考に、
import chromedriver_binary
を追加してみましたが、③と同様に、エラーコード127が返ってきました、、
③ chromedriverが起動できていないからでは?と思い、
ターミナルで、chromedriverと入力
し、起動できたのですが、今度は、
→結果:
WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: 127
という新しいエラーメッセージが返ってきました、、
② Dockerfileは関係ないか?と思い、一旦Dockerfileの追記は削除しました。
・chromedriverをreinstall直したり、
・chromeのアップデートとchromedriverをバージョンが合うものでインストールし直したり、
・chromedriverがひらけなかったので、macのシステム環境設定から開けるようにしたり、
色々試行→
→結果:WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
① Dockerを使ったコンテナで、これまでもJupyter Labで行ってきたため、Dockerfileにchromedriverのインストールなどができるように以下のサイトのものをコピペして追加ました。
https://gist.github.com/varyonic/dea40abcf3dd891d204ef235c6e8dd79
(初心者のため、Dockerfileの内容が理解できておらず、コピペしてしまいました。)
そこでDockerfileを更新するために、ターミナルでdocker-compose up --buildを実行すると、
→結果:
ERROR:
Can't find a suitable configuration file in this directory or any
parent. Are you in the right directory?
Supported filenames: docker-compose.yml, docker-compose.yaml
と返ってきて、Dockerfileの更新方法もわかりません。
補足
jupyter labでのマウント?設定はこのようになっています。
スクレイピング.ipynbファイルが問題のエラーコードが出ているファイルですが、自動化大全ディレクトリ内のものです。
Dockerとデスクトップのマウントは、
・デスクトップ:/User/user/Desktop/kinocode
・Docker:/workspace
となっているようです。
(初心者なので、認識間違っている可能性があればぜひご教示ください。)
回答1件
あなたの回答
tips
プレビュー