表題の通り、Ubuntu でスクレイピングすべく Selenium と Google Chrome をインストールしてやってみました。
まずは環境の確認です。Python3 は最初からインストールされていました。
$ cat /etc/issue
Ubuntu 20.04.1 LTS
$ python3 --version
Python 3.8.5
インストール
pipをインストール
pipはインストールされていなかったので、インストールします。
$ sudo apt update $ sudo apt install python3-pip $ pip3 --version pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
seleniumをインストール
$ sudo apt install python3-selenium
Chromeをインストール
手順が複雑ですが、下記の手順でやってインストールできました。Chromeインストールについては下記のサイトを参考にさせていただきました。
$ cd /tmp
$ wget https://dl.google.com/linux/linux_signing_key.pub
$ sudo apt-key add linux_signing_key.pub
$ echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | sudo tee /etc/apt/sources.list.d/google-chrome.list
$ sudo apt-get update
$ sudo apt -f install -y
$ sudo apt-get install google-chrome-stable
バージョンを確認してみます。
$ google-chrome --version Google Chrome 88.0.4324.96 $ chromedriver -v ChromeDriver 88.0.4324.96 (68dba2d8a0b149a1d3afac56fa74648032bcf46b-refs/branch-heads/4324@{#1784})
どちらも 88.0.4324.96 ということで揃っています。google-chromeとchromedriverのバージョンがかけ離れていると動作しないことがあるようですので、なるべく合わせるようにしたほうが良いようです。
WebDriverManagerをインストール
参考にしたサイトでは、ここまでで動作するとのことだったのですが、下記のようなエラーメッセージが表示されてしまい、動作しませんでした。
Selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: crashed (chrome not reachable) (The process started from chrome location snap/chromium/1466/usr/lib/chromium is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
色々試してみたところ、WebDriverManager をインストールして使用するようにすると良さそうなことがわかりましたので、インストールしました。
# pip3 install webdriver-manager
動かしてみる
では早速動かしてみたいと思います。test.pyファイルを作成し下記の内容を入力します。
# - coding: utf-8 -- from selenium import webdriver from selenium.webdriver import ChromeOptions from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager url = "https://example.com/" # ヘッドレスモードでブラウザを起動 options = ChromeOptions() options.add_argument('--headless') # サービスを起動 serv = Service(ChromeDriverManager().install()) # ブラウザーを起動 driver = webdriver.Chrome(service=serv, options=options) # urlにアクセス driver.get(url) title = driver.find_element_by_tag_name("h1") print(title.text) # ブラウザ停止 driver.quit()
エラーの例
試行錯誤している中で、下記のようなエラーが表示されたことがありました。
(unknown error: DevToolsActivePort file doesn't exist)
これは、Chromeがディスプレイ表示できないためのエラーのようで、ヘッドレスモードが指定されていないときに表示されるようです。ソースコード内でヘッドレスモードを指定するようにします。
options.add_argument('--headless')
0件のコメント