33
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Headless chromeでSelenium使ってみた

Last updated at Posted at 2017-08-08

今回はSeleniumを使ってHeadless Chromeを操作してみます。

コードはGitHubにまとめました。

追記

  • 8/9 並列実行を実装

実行環境

  • maxOS Sierra ver. 10.12.6
  • Python 3.6.1
  • Google Chrome 59.0

Headless Chromeとは

Google Chrome 59から導入されたChromeを画面表示せずに動作するモード。これにより、自動テストやUIがないサーバ環境で使えるとのこと。

*WindowsのみChrome 60からサポートされるみたいです

準備

  1. 最新版Chromeをインストール
  2. Python 3.6をダウンロード (virtualenvを使うことをおすすめします)
  3. Selenium等を依存ライブラリのインストール

Python依存ライブラリ

今回は以下のライブラリを使います

  • Selene - SelenideをPythonで実装したものでSeleniumを扱いやすくしてくれる *
  • python webdriver manager - ブラウザのドライバを自動インストールおよび管理してくれます**
  • Selenium
  • joblib - 並列化実行に使用

*まだα版なためAPIが変更する可能性があります

**インストールされたドライバはデフォルトで~/.wdm/ 以下に保存されます

依存ライブラリインストール

pre-releaseの最新版のseleneをインストールします。
上記のライブラリはseleneインストール時に同時に入ります。
また、sixはなぜか依存しているのに一緒に入らなかったので別途インストールします。

pip install selene --pre pip install six

サンプルコード

Google検索を行い、その結果をスクリーンショットする簡単なものとなっております。

sample_selene.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selene.driver import SeleneDriver
from webdriver_manager.chrome import ChromeDriverManager

# run chrome headless
options = Options()
options.add_argument('--headless')

# install chromedriver if not found and start chrome
driver = SeleneDriver.wrap(webdriver.Chrome(executable_path=ChromeDriverManager().install(), chrome_options=options))

# search 'python' in google
driver.get('https://www.google.co.jp/')
input = driver.find_element_by_name('q')
input.send_keys('Python')
input.send_keys(Keys.RETURN)

# save screen shot
driver.save_screenshot('result.png')

driver.quit()

実行結果は以下の通りとなっています。

result.png

サンプルコードの並列化

sample_selene_parallel.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selene.driver import SeleneDriver
from webdriver_manager.chrome import ChromeDriverManager
from joblib import Parallel, delayed

# search 'keyword' in google
def google(url, keyword):
    # run chrome headless
    options = Options()
    options.add_argument('--headless')
    driver = SeleneDriver.wrap(webdriver.Chrome(executable_path=ChromeDriverManager().install(), chrome_options=options))
    driver.get(url)
    input = driver.find_element_by_name('q')
    input.send_keys(keyword)
    input.send_keys(Keys.RETURN)

    # save screen shot
    driver.save_screenshot(keyword + '.png')

    driver.quit()

url = 'https://www.google.co.jp/'
keywords = ['Python', 'Google', 'Selenium']

# n_jobs=-1 means use all of the resources you can`
Parallel(n_jobs=-1)(delayed(google)(url,keyword) for keyword in keywords)

実行結果は以下の通り。Pythonの結果は割愛。
Google.png

Selenium.png

参考リンク

33
35
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?