表題の通り、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インストールについては下記のサイトを参考にさせていただきました。

https://self-development.info/ubuntu%E3%81%A7selenium%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E3%82%92%E8%A1%8C%E3%81%86%E3%80%90python%E3%80%91/

$ 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 をインストールして使用するようにすると良さそうなことがわかりましたので、インストールしました。

https://stackoverflow.com/questions/64717302/deprecationwarning-executable-path-has-been-deprecated-selenium-python

# 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件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください