概要
SeleniumはWebブラウザーの操作を自動化するソリューションで、たとえばWebサイトに検索ワードを入れて検索ボタンを押し、ダウンロードボタンを押すような一連の動作を自動化することによって、Webアプリケーションのテストや自動作業(一種のRPA)に使える。
今回はWindows+WSL2を使って、Selenium+Python3が動くところまでを概説する。
基本的に人の投稿を検索してなぞっただけです。
- WSL2にLinux用のChromeをインストールする
- さらにSelenium-Python3とChromeDriverをインストールする
- Seleniumのサンプルプログラムを動かす
とりあえずWindows 10でWSL2が動作し、Xサーバーが使えるところまで来たという前提で話を進める。
ここまでは以下の記事にまとめたので、よろしければ見てください。
前書き
ふだんパソコンは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を使った。
まずはインストール。
以下の記事を参考にした。
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をデフォルトのブラウザーにしますか、統計情報を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をインストールする
以下しばらくの間、こちらの記事を参考にする。
まず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
91.0.4472.101が良さそうなので、その中のLinux用のURLを調べ、WSL2側でダウンロードする。
$ 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として作成する。
#! /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」という言葉を検索しているところのスクショが取れていたら成功。
(この項終わり)