headless chromeをpythonで動かしてみた

はじめに

Faxのスパム分類シリーズでFaxをダウンロードする際に使用したのでこちらの記事では少し詳しく紹介していきます。

スクレイピングは用法に気を付けてしてください。

目次

  1. 環境構築
  2. コマンドの説明

環境構築

pythonとpipとChrome Canaryが既に入っている前提ですが以下のコマンドで環境構築が可能です。 ほかにもpipを使わずにchrome driverをインストールする方法もありますが、pipを使ったほうがpathを自身で通す必要がなく楽なのでおすすめです。

pip install selenium
pip install chromedriver-binary

コマンドの説明

headlessモードで動かす場合はheadON modeのところをコメントアウトし、headless modeのところをコメント解除すれば良い

from selenium import webdriver
import chromedriver_binary


#---headON mode---------
driver = webdriver.Chrome()

# #---headless mode-----------------------------
# options = webdriver.ChromeOptions()
# #---headlessで動かすために必要なオプション---
# options.add_argument("--headless")
# options.add_argument("--disable-gpu")
# options.add_argument("--window-size=1280x1696")
# options.add_argument("--disable-application-cache")
# options.add_argument("--disable-infobars")
# options.add_argument("--no-sandbox")
# options.add_argument("--hide-scrollbars")
# options.add_argument("--enable-logging")
# options.add_argument("--log-level=0")
# options.add_argument("--single-process")
# options.add_argument("--ignore-certificate-errors")
# options.add_argument("--homedir=/tmp")
# driver = webdriver.Chrome(options=options)


# headless modeの場合ダウンロード先を明示しないとエラーになる
# File download指定
download_path="./download"
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
driver.execute("send_command", {
    'cmd': 'Page.setDownloadBehavior',
    'params': {
        'behavior': 'allow',
        # ダウンロード先
        'downloadPath': download_path
    }
})

# Google検索画面にアクセス
driver.get('https://www.google.co.jp/')

# htmlからStringを探しsend_keysでStringを入力する
phone_number = driver.find_element_by_name("String")
phone_number.send_keys("String")

# 探してきたボタンなどをクリックする
driver.find_element_by_class_name("String").click()

# htmlのPath(String)で探す
driver.find_element_by_xpath("String")

# htmlのPath(String)で探したあとにinnerText値取得
driver.find_element_by_xpath("String").text

# get_attribute("value")を使うとvalue指定で取得できる
driver.find_element_by_xpath("String").get_attribute("value")

# 最後に必ず明記する もし明記せず実行を繰り返すとメモリーを大量に使われる
driver.quit()

実際にgoogleにアクセスしました

こちらのコードは以下のとおりです。

from selenium import webdriver
import chromedriver_binary
import time

#---headON mode---------
driver = webdriver.Chrome()

# Google検索画面にアクセス
driver.get('https://www.google.co.jp/')

time.sleep(5)

driver.quit()