#はじめに
過去、Windows環境下でSeleniumとかPhantomJSを使ってスクレイピングしてきたのですが、ここにきて、「Headless Chromeというのがあって、その影響でPhantomJSの開発はストップした」といったことを耳にしました。
「じゃあ、Headless Chromeとやらをいじってみないと。。。」ということで、私物のMacでやってみて、意外に簡単にできることが確認できました。
が、どうもWindows環境下でのHeadless Chromeの動作についての記事をネット上とかでも目にしないし、書籍も出ていないようだし、私の職場環境はWindowsがメインだったりするので、いずれやっておく必要があると思い、試してみたらうまくいったので、そのメモをしておきます。
ポイントは、直接、chrome.exeに--headlessとか--screenshotとやってもちゃんと動いてくれないようなので、そこで諦めるのではなく、ChromeDriverをかませれば、Seleniumから制御可能になる、という点かと。
#やってみたこと
Windows10のPCに以下のソフトをインストールしました。
1.Google Chrome 私が実際に試したモノは「バージョン: 62.0.3202.62(Official Build) (64 ビット)」です。
2.Python3 私が実際に試しモノは「python-3.6.3-amd64」です。
3.ChromeDriver 私が実際に試しモノは「ChromeDriver 2.33」です。
※2と3はパスを通しておくなり、格納してある場所をプログラム中で絶対パス指定して呼び出せるようにすること。
※Pythonのソースの文字コードは、UTF-8で書いておくこと。
Mac環境下で Python3 + Selenium + PhantomJS版のサンプルプログラム(ame-pjs.py)を作っていたので、これをWindows環境下でも動くようにしてみました。これはWindows環境下でも Selenium + PhantomJS な環境であれば、そのまま動作します。
「東京アメッシュのスクリーンショットを撮る」という単純なモノです。
Webページに行ってスグにスクリーンショットを撮ろうとしても画像が表示しきれていないこともあるので、3秒待ってからスクリーンショットを撮るようにしています。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get("http://tokyo-ame.jwa.or.jp/")
time.sleep(3)
driver.save_screenshot("ame-pjs.png")
これをHeadless Chrome版にしてみると、こうなります。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1024,768')
driver = webdriver.Chrome(chrome_options=options)
driver.get("http://tokyo-ame.jwa.or.jp/")
time.sleep(3)
driver.save_screenshot("ame-hc.png")
というわけで、PhantomJS上でやっていたことをHeadless Chromeに移植してみると、ちょっとだけ行数が増えました。
が、こんな感じで移植そのものは難しくなさそうです。
#今後のこと
ここ最近のスクレイピング界隈は、Mac環境下かLinux環境下での動作を前提としているモノが多いようです。
とはいえ、昔ながらの会社組織ではまだまだWindows環境が主流だったり、Macの導入ができないケースもあったりするとかと思います。そういう会社組織に属している人が自動化をしたいと思ったときに参考になるものが何もない状況だと、そこから先に進めなくなってしまうため、自動化やスクレイピングの裾野を広げていくためにも、そのあたりのノウハウの共有が結構重要だと思ったりもしています。
#参考
・How do I use Headless Chrome in Chrome 60 on Windows 10?
・WindowsでHeadless Chromeでスクレイピング