ポートフォリオサイト公開中

【ChromeDriver】python3でgoogle検索を自動化する

こんにちは、ともろう(@tomorrowSLog)です。
webdriverの自動検索で少し遊んでみたので書きます。

目次
  1. ChromeDriverとは
  2. google検索を自動でしてみる
  3. スクリーンショットをとってみる
  4. まとめ

環境

macOS Sierra10.12.6
Python 3.7.1

ChromeDriverとは

WebDriverは、多くのブラウザにまたがるWebアプリケーションの自動テスト用のオープンソースツールです。Webページ、ユーザー入力、JavaScriptの実行などをナビゲートする機能を提供します。ChromeDriverは、WebDriverのChromium用ワイヤプロトコルを実装するスタンドアロンサーバーです。参考: http://chromedriver.chromium.org/home

今回はChromeDriver公式Getting Startedにある簡単なSample testを動かしてみます。
selenium と chromedriverを使うのでインストールしておきましょう。

ターミナル
$ pip3 install selenium
$ brew install chromedriver

google検索を自動でしてみる

python3
import time
from selenium import webdriver

driver = webdriver.Chrome()  # Optional argument, if not specified will search path.
driver.get('http://www.google.com/xhtml');
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()
  1. Chromeを立ち上げhttp://www.google.com/xhtmlを開きます。
  2. 5秒間待ちます。
  3. 検索窓にChromeDriverと打ち込み、検索します。
  4. 5秒間待ちます。
  5. Chromeを閉じます。

という操作内容です。

スクリーンショットを撮ってみる

せっかくなのでもう少し遊んでみます。

  1. tomowarkar.comで検索
  2. 1番上のページリンクをクリック(このブログのトップページになるはず。)
  3. 表示されたページをスクリーンショット

google検索に加えこの3つを実装して行きます。

python3/line1~7
import time
from selenium import webdriver
from datetime import datetime

driver = webdriver.Chrome()
driver.get('http://www.google.com/xhtml')
time.sleep(5)

さっきとあまり変わっていないですが、datatimeモジュールを入れています。スクリーンショットの時に使います。

python3/line9~12
search_box = driver.find_element_by_name('q')
search_box.send_keys('tomowarkar.com')
search_box.submit()
time.sleep(5)

こちらも検索keyがtomowarkar.comに変わっただけです。

python3/line14~15
element = driver.find_element_by_class_name("LC20lb")
element.click()

class属性から要素を取得して、それをクリックしてみます。

検証画面の出し方

右クリック→検証で下の画像が出てきます。

http://www.seleniumqref.com/api/python/element_get/Python_find_element_by_class_name.html

python3/line17~18
sfile = driver.get_screenshot_as_file("{}.png".format(datetime.now().strftime('%Y%m%d%H%M%S')))
driver.quit()

最後に記念撮影としてスクリーンショットを取ります。

スクリーンショットのファイル名を固定化してしまうと複数枚スクリーンショットを撮った時にファイルが上書きされてしまうので、今回は撮影日時をスクリーンショットのファイル名に設定します。

以下がコードの全文になります。

python3/全文
import time
from selenium import webdriver
from datetime import datetime

driver = webdriver.Chrome()
driver.get('http://www.google.com/xhtml')
time.sleep(5)

search_box = driver.find_element_by_name('q')
search_box.send_keys('tomowarkar.com')
search_box.submit()
time.sleep(5)

element = driver.find_element_by_class_name("LC20lb")
element.click()

sfile = driver.get_screenshot_as_file("{}.png".format(datetime.now().strftime('%Y%m%d%H%M%S')))
driver.quit()

実行結果がこちら。

うまくいきました。

  1. Chromeを開き
  2. 5秒間待ってtomowarkar.comと検索
  3. さらに5秒待ってページ遷移
  4. このサイトのtopページを開いて
  5. Chromeを閉じる

以上の動作をして、ファイルの中にスクリーンショットが保存されていたら無事成功です。

僕のMacではスクリーンショットはマイファイルの中に保存されていました。

まとめ

案外簡単にweb操作ができるなという印象でした。slakとかGASとかと組み合わせて何か製作していけたらなと思います。

次は動的サイトのwebスクレイピングに挑戦します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です