【これも】WSL2＋Chrome＋Selenium＋Python【検索してなぞっただけ】

# 概要
SeleniumはWebブラウザーの操作を自動化するソリューションで、たとえばWebサイトに検索ワードを入れて検索ボタンを押し、ダウンロードボタンを押すような一連の動作を自動化することによって、Webアプリケーションのテストや自動作業（一種のRPA）に使える。
今回はWindows＋WSL2を使って、Selenium＋Python3が動くところまでを概説する。
基本的に人の投稿を検索してなぞっただけです。

- WSL2にLinux用のChromeをインストールする
- さらにSelenium-Python3とChromeDriverをインストールする
- Seleniumのサンプルプログラムを動かす

とりあえずWindows 10でWSL2が動作し、Xサーバーが使えるところまで来たという前提で話を進める。
ここまでは以下の記事にまとめたので、よろしければ見てください。

https://qiita.com/query1000/items/04409b8e28793a9407d0
# 前書き
ふだんパソコンはWindows主力だが、Perl＋EmacsはWSL1＋Ubuntuで使っている。
どちらもWindowsでやろうとしたことがあるが、WSL＋Ubuntuでやったほうがカンタンだ。
とりあえずLinuxだとそのまま使えるハックがQiitaやブログに沢山載っている。

今回、Seleniumを使ったWebクローリングを自動化するため、WSL2にPython3とChromeを入れることにした。
Windowsを使ってSeleniumを使うことも、PythonではなくてPerlで使うことも出来るが、やはり用例が多いUbuntuを使うことにしたのだ。
WSL1のままChrome、Python3、Seleniumを動かすことも出来るはずだが、なぜかChromeのインストールがうまく出来なかったので、WSL2で新規に環境を構築した。
個人的な話が多くてスミマセン。
だが、これからWindows環境でUbuntu、Emacs、Python3、Seleniumなどを使うなら、WSL2を使うのがラクチンな気がするので、参考になる人もいるだろう。

# Chromeをインストール
SeleniumはFirefoxなどにも対応しているが、今回はGoogle Chromeを使った。
まずはインストール。
以下の記事を参考にした。

https://astherier.com/blog/2020/08/install-google-chrome-on-wsl2/

WSL2のbashから以下のコマンドを打ち込む。
上から取得元の追加、公開鍵の追加、Ubuntuのアップデート、Chromeのインストールだ。

```
$ sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
$ sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
$ sudo apt update
$ sudo apt install google-chrome-stable
```

できたら起動。

```
$ google-chrome&
```

&はバックグラウンド実行で、Chromeが起動してもbashの操作を続けるため。
無事起動すると以下のダイアログが表示される。
![chrome_1st.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107571/42c75244-cd65-ed45-3ebb-c65a50b16e3d.png)
Chromeをデフォルトのブラウザーにしますか、統計情報をGoogle社に送りますかと聞かれているが、無批判に受け入れてOKした。（下のはオフで良かったかもしれない〜

# Python3は/usr/bin/python3をそのまま使った
Microsoft Storeから"Ubuntu"（バージョン番号なし）をWSL2にインストールすると、Ubuntu 20.04が入る。
この状態で、もうPython 3.8.5が入っている。

```
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"

$ which python3
/usr/bin/python3

$ python3 -V
Python 3.8.5
```

/usr/bin/python3はシステムが使うものだからユーザーがいじっちゃいけないという話もあるが、今回は簡単にこれを使うことにした。
Anacondaやvenvなどを使った仮想環境も使っていない。

# Seleniumをインストールする
以下しばらくの間、こちらの記事を参考にする。

https://ararabo.com/2021-04-24/?p=12161

まずpython3-seleniumをインストールした。

```
$ sudo apt install python3-selenium -y
```

# ChromeDriverをインストールする
Seleniumをインストールすると、/usr/bin/chromedriverというファイルが出来るが、これはそのままでは使えないらしいので、ダウンロードしてきて置換する。

なるべく新しいバージョンで、でもChromeのバージョンを**下回る**ものでなければダメらしい。
Chromeのバージョンを調べる。

```
$ google-chrome --version
Google Chrome 91.0.4472.114
```

次に以下のサイトから、ChromeDriverのバージョンを調べる。
https://chromedriver.storage.googleapis.com/index.html

![SnapCrab_httpschromedriverstoragegoogleapiscomindexhtml - Google Chrome_2021-7-12_15-19-44_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107571/434ae58c-5a4c-b932-9ed2-15d395719dd8.png)

91.0.4472.101が良さそうなので、その中のLinux用のURLを調べ、WSL2側でダウンロードする。

![SnapCrab_httpschromedriverstoragegoogleapiscomindexhtmlpath=9104472101 - Google Chrome_2021-7-12_15-20-36_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107571/1fac774d-4e9f-85a6-b207-5f51ff54bf32.png)

```
$ wget https://chromedriver.storage.googleapis.com/91.0.4472.101/chromedriver_linux64.zip
```

zip形式なので、unzipをインストールして解凍し、/usr/bin/chromedriverを置換した。

```
$ sudo apt install unzip -y
$ unzip chromedriver_linux64.zip
$ sudo mv chromedriver /usr/bin/chromedriver
```
以下のテストコードをtest.pyとして作成する。

```Python
#! /usr/bin/python3

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options) 

driver.get('https://www.google.com/')
print(driver.title)

search_box = driver.find_element_by_name("q")
search_box.send_keys('ChromeDriver')
search_box.submit()
print(driver.title)

driver.save_screenshot('search_results.png')
driver.quit()
```

実行してみる。

```
$ chmod +x ./test.py
$ ./test.py
```

search_results.pngというファイルができ、Chromeで「ChromeDriver」という言葉を検索しているところのスクショが取れていたら成功。

**（この項終わり）**