【超便利】PythonとSeleniumでブラウザを自動操作する方法まとめ

selenium

SPONSORED LINK

こんにちは、ハッカー見習いのたぬ(@KAivlys)です!

Pythonの『Selenium』というライブラリを用いれば、ブラウザを簡単にハックすることができます。

selenium-default

Seleniumの実行サンプル|Googleで『Amazon』と検索して、Chromeを終了させるプログラム

Seleniumを使えば、今まで手作業で行っていた作業を全て、コンピュータに丸投げできる可能性があります。

極論を言えば、ブラウザでやってる全ての作業は、Seleniumで実現可能です。

煩雑な手作業はコンピュータにやらせて、コンピュータが苦手な頭脳活動を仕事で広げたい…!

今回の記事は、Seleniumの導入から私自身がよく使うSeleniumのベストプラクティスまでの総集編です。自分への備忘録も含め、Python初学者の参考になれば嬉しいなと切に願ってます。

それでは、どうぞ!

動作環境
  • OS|MacOS High Sierra
  • Chrome|70
  • ChromeDriver|2.43
  • Python|3.6.5
Pythonのインストールがまだ終わってない人は、こちらを参考にインストールしてみて下さい!

[Mac]未経験者向け!Pythonの『導入・初期設定』から『実行』まで紹介

2018.11.26

初期設定

PythonでSeleniumを動かすためにする初期設定は2つあります。

この記事を読み進める上での前提条件
  1. Seleniumをインストールする
  2. WebDriverが任意の階層にダウンロードする

Seleniumをインストールする

ターミナルでSeleniumをインストールします。

seleniumをインストールする
pip install selenium

WebDriverをダウンロードする

Seleniumを使うには、操作するブラウザに対応したWebDriverのダウンロードが必要です。

今回は、Google Chromeでブラウザの自動操作をしてみましょう。

ということで、Google Chrome用のWebDriverをダウンロードします!

STEP1:Seleniumの公式サイトからWebDriverをダウンロードする

公式サイトからChromeのWebDriverの最新版をダウンロードします。

selenium-default1

Latest Releaseの隣をクリックすると、下の画面に遷移します。

selenium-default2

今回はMacで実行するので、Mac用のドライブをダウンロードします。

STEP2:WebDriverの保存場所を整理する

selenium-default3

今回はデスクトップに『Selenium』というフォルダを新規作成して、その中にSTEP1でダウンロードしたWebDriverを格納します。

以上を持ちまして、PythonでSeleniumを使う初期設定が終わりました。

基本設定(テンプレート)

Seleniumでブラウザ操作をするフロー
  1. 操作したいブラウザを開く
  2. 操作したいページを開く
  3. 操作したい要素を指定する
  4. 指定した要素を操作する

Seleniumで実際にブラウザを操作する流れは、上記の4ステップです。

Seleniumのプログラムは『操作したいブラウザを指定する』と『操作したいページを開く』を指定し、後は『操作したい要素を指定』と『その要素を操作する』をひたすら書きまくるだけの、あまり頭を使わない簡素なソースコードになります。

# PythonでSeleniumのwebdriverモジュールをインポート
from selenium import webdriver

# 1.操作するブラウザを開く
# /Users/Kenta/Desktop/Selenium/chromedriver
driver = webdriver.Chrome('WebDriverを格納しているディレクトリを指定')

# 2.操作するページを開く
driver.get('URL')

# 基本設定はここまで。↑は使い回し可能。ここから下は、やりたい動作によって増える

# 3.操作する要素を指定

# 4.その要素を操作する

Seleniumのインポート

# PythonでSeleniumのwebdriverモジュールをインポート
from selenium import webdriver

WebDriverのインポート

# 1.操作するブラウザを指定する
# /Users/Kenta/Desktop/Selenium/chromedriver
driver = webdriver.Chrome('WebDriverを格納しているディレクトリを指定')

操作するページを開く

# 2.操作するページを開く
driver.get('URL')

その他のページ操作

# 『戻る』ボタンをクリック
driver.back()

# 『進む』ボタンをクリック
driver.forward()

# リフレッシュ(リロード)
driver.refrash()

# ページを閉じる
driver.close()

# ブラウザを終了する (全てのウィンドウを閉じる)
driver.quit()

要素を指定

Seleniumでブラウザ操作をするフロー
  1. 操作したいブラウザを開く
  2. 操作したいページを開く
  3. 操作したい要素を指定する
  4. 指定した要素を操作する

Seleniumを使うときのテンプレの設定が終わったところで、いよいよブラウザ操作にまつわる部分のコードを紹介します。

id、class、name

# id属性で指定する
driver.find_element_by_id('ID')

# class属性で指定する
driver.find_element_by_class_name('CLASS_NAME')

# name属性で指定する
driver.find_element_by_name('NAME')

だいたいこれらのどれかを使って、要素を取得してます。楽なので。

WebサイトのIDやclass、nameを調べたいときは、ディベロッパーツール(+option+I)やソースコード(+option+U)を表示すれば出てきます。

Chromeの作業効率3倍アップ!?超強力なショートカットキー10個を厳選してみた

2018.03.20

CSSセレクタ

# CSSセレクタで指定する
driver.find_elements_by_css_selector('CSSセレクタ')

id、class、nameがちゃんと設置されてないページでも、CSSセレクタをゴリゴリ書けば基本的になんでも要素を取得できます。

リンクテキスト

# 完全一致のリンクテキスト
driver.find_elements_by_link_text('リンクテキスト')

# 部分一致のリンクテキスト
driver.find_elements_by_partial_link_text('リンクテキスト')

完全一致と部分一致について補足します。

次のページに進む』というリンクテキストがあったとすると、完全一致の場合は『driver.find_elements_by_link_text('次のページに進む')』で取得でき、部分一致の場合は『driver.find_elements_by_partial_link_text('進む')』だけでも取得できるというわけです。

部分一致の場合『複数あると思わずに、思わぬ挙動をさせてしまう恐れがある』という点だけ注意して使いましょう。

要素を操作

Seleniumでブラウザ操作をするフロー
  1. 操作したいブラウザを開く
  2. 操作したいページを開く
  3. 操作したい要素を指定する
  4. 指定した要素を操作する

操作する要素を指定した後は、その要素に対してクリックさせたりテキストを入力させたりと、何かしらアクションさせるだけです。

ここでは、ブラウザ操作するときによく使うアクションを紹介します。

前提として、要素はすべてIDで指定しているものとします。

クリックする

# クリックする
driver.find_element_by_id('ID').click()

これが一番使ってる気がします。

テキストを入力・取得・クリアする

# テキストを入力する
driver.find_element_by_id('ID').send_keys('文字列')

# テキストを取得する
driver.find_element_by_id('ID').text()

# テキストをクリアする
driver.find_element_by_id('ID').clear()

select要素のoptionを選択・選択解除する

SELECT要素のOPTIONはクリックしても反応しません!

選択する

# Selectタグを操作できるモジュール
from selenium.webdriver.support.ui import Select

# 選択する(value属性)
Select(driver.find_element_id('ID')).select_by_value('VALUE')

# 選択する(index|番号)
Select(driver.find_element_id('ID')).select_by_index(INDEX)

# 選択する(テキスト)
Select(driver.find_element_id('ID')).select_by_visible_text('文字列')

選択解除する

# Selectタグを操作できるモジュール
from selenium.webdriver.support.ui import Select

# 選択解除する(value属性)
Select(driver.find_element_id('ID')).deselect_by_value('VALUE')

# 選択解除する(index|番号)
Select(driver.find_element_id('ID')).deselect_by_index(INDEX)

# 選択解除する(テキスト)
Select(driver.find_element_id('ID')).deselect_by_visible_text('文字列')

# すべて選択解除する
Select(driver.find_element_id('ID')).deselect_all()

さいごに

今回は、Seleniumの導入方法とよく使う処理をまとめました。

Seleniumを使えば、仕事や趣味を問わず、いろんなことが効率化できます。

Seleniumでブラウザをハックして、いろいろ捗らせよう!

それでは

SPONSORED LINK

selenium

ABOUTこの記事を書いてる人

たぬ(谷口健太)

25歳社会人。本職は福岡の通販会社でWebマーケッターやっとります。 プログラミング✕マーケティング=最強説を唱えており、非効率的な世の中に革命を起こそうと本ブログを設立。 ストレングスファインダー:戦略性・最上志向・目標志向・未来志向・個別化