Python3 + Selenium + Headless Chromeでブラウザを自動操作する(超入門編)

はじめに

最近、WebアプリケーションのE2Eテストやスクレイピングなどに興味があるので 、
seleniumを使ってブラウザの自動操作をできるよう環境を作ってみました。
同じような記事はたくさんありますが、備忘録も兼ねて書いておきます。

環境は以下の通りです。 MacからVagrant上のCentOS7にSSHで接続し、そちらからコマンドを実行しています。

ホストOSmacOS Sierra バージョン 10.12.6
ゲストOSCentOS Linux release 7.4.1708 (Core)
Python3.6.2
Chrome66.0.3355.0 dev
chromedriver2.3.6
IDEPyCharm 2017.3.1 Professional Edition

Seleniumインストール

# pip intall selenium

これでOKです。

Google ChromeをCentOS7にインストール

他の記事だとこれをやってなくてもできてるっぽかったのですが、 自分の環境ではこれをやらないと動きませんでした。

# yum install google-chrome

# google-chrome --version
Google Chrome 66.0.3355.0 dev

ChromeDriverインストール

ChromeDriver - WebDriver for Chromeからダウンロードします。 今回はGoogle Chrome 66なので、Supports Chrome v64-66と書いてあるChromeDriver 2.36をダウンロードしました。

# wget http://chromedriver.storage.googleapis.com/2.36/chromedriver_linux64.zip
# unzip chromedriver_linux64.zip 
# mv chromedriver /usr/local/bin

動かしてみる

Chromeを起動してGoogle検索し、検索結果を表示してついでにスクリーンショットを撮るプログラムを書いてみます。
検索してるもので趣味がダダ漏れになってるのは気にしないでください。
シロちゃんはいいぞ。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options


options = Options()

# ヘッドレスモードを有効にする
options.add_argument('--headless')

# ChromeのWebDriverオブジェクトを作成する。
driver = webdriver.Chrome(chrome_options=options)

driver.get('https://www.google.co.jp/')

assert 'Google' in driver.title

input_element = driver.find_element_by_name('q')
input_element.send_keys('電脳少女シロ')
input_element.send_keys(Keys.RETURN)

driver.set_window_size(1280, 720)
driver.save_screenshot('search_screen_shot.png')

for a in driver.find_elements_by_css_selector('h3 > a'):
    print(a.text)
    print(a.get_attribute('href'))

実行すると、以下のように検索結果がターミナルに出力されます。

f:id:len_prog:20180307233734p:plain

いい感じですね。

スクリーンショットもこんな感じで撮れます。 f:id:len_prog:20180308000527p:plain

とりあえずこれでSeleniumデビューできたので、色々使ってみようと思います。

参考にしたサイト

Selenium ChromeDriver & PythonをMacで動かす準備メモ