RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

PythonとSeleniumを使ったプチ自動化で業務効率UPしてみた

はじめに

皆さんこんにちは。インフラエンジニアやってますmoja_chiroです。
今回はPythonSeleniumを使用してちょっとした自動化を行い、業務効率UPを目指しました。

日々の運用業務の中で月次集計のレポート作成で手間と時間が取られていたため、データの集計作業(コピペ)を自動化させて楽になりました。帰宅前にPythonプログラムを実行しておくと、翌日出社したタイミングではエクセルに結果が保存されているという内容です。
一部Seleniumではなく、PyAutoGUIも使用しました。

一部のコードを記載しておりますが、あくまで個人の業務効率UPを目的としているため、コードの不備はあらかじめご了承ください。

Pythonとは

Pythonとは、組み込み開発、WEBアプリケーション、デスクトップアプリケーションなどで利用されるプログラム言語です。
インフラ畑の人間からすると、プログラム言語っていうと敷居が高いイメージです。
Pythonを検索すると、人工知能機械学習の分野やWebアプリ開発でよく利用されており人気の言語らしいです。

言語としての特徴は、文法がとてもシンプルで、標準ライブラリや外部ライブラリが多く、初心者でも扱いやすい言語です。

▼公式ドキュメント www.python.org

Wikiペディア ja.wikipedia.org

Seleniumとは

Seleniumとはブラウザーの自動化を可能にし、ブラウザを自動的に操作するツールとライブラリーです。

Seleniumの公式ページ www.selenium.dev

Pythonをインストール

まず始めにPythonの環境を構築する必要があります。

▼公式ページ www.python.org

  1. Python公式サイトから、Pythonパッケージをダウンロードします。
  2. ダウンロードしたパッケージをインストールします。
  3. PowerShellPythonを実行するときに必要となる、スクリプトの実行許可を設定します。

ダウンロードからインストール手順はこちらのサイトが分かりやすいと思います。

WindowsPythonのインストール www.python.jp

ウィザードの中で出てくるパスを通しておく必要があります。

  ※Add python.exe to PATHのチェックを入れる

また、開発するにあたってはPython実行環境を構築する必要があります。
次のコマンドを入力して、仮想環境を構築します。

C:\Users\user1\sample1>python -m venv virtual_environment

・仮想環境への切替
WindowsPowerShellを使用する

PS C:\Users\user1\sapmle1> PS C:\Users\user1\sapmle1> virtual_environment\Scripts\activate.ps\Scripts\activate.ps

仮想環境を終了する場合は、deactivateコマンドを実行します。

Seleniumをインストール

・pipを使用してSeleniumをインストールする
pipとは、The Python Package Indexで公開されているPythonパッケージのインストールなどを行うユーティリティで、Python 3.4以降では標準で付属されています。
パッケージのインストールは、pipのinstallコマンドで行います。

Seleniumパッケージをインストールするときは、次のように実行します。

C:\Users\> python -m pip install selenium

インストール時にSSLのエラーが発生する場合は、trusted-hostのオプションを付けるか、pip.iniファイルを作成して実行してください。

C:\ProgramData\pip\pip.ini

pip.iniの中身

[global]
trusted-host = pypi.python.org
               pypi.org
               files.pythonhosted.org

WebDriver(ChromeDriver)のインストール

Seleniumでは、WebDriverを使用してブラウザを操作します。そのためSeleniumを使用するためにはWebDriverのインストールが必要です。
WebDriverは、使用するブラウザの種類によって使い分けが必要で、今回は使い慣れている「Google Chrome」のドライバー(ChromeDriver)を使用します。
ChromeDriverのインストールについては、以下のリンクからDriverをダウンロードしてください。
インストールするバージョンは、現在使用中の「Google Chrome」のバージョンに合わせます。

ダウンロードサイト sites.google.com

chromeドライバーは作業用フォルダーと同じ場所に保存する方が管理しやすいです。
保存先のディレクトリを指定する場合は、executable_path=""で任意のパスを指定する必要があります。
指定する場合は以下のように記述します。

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

driver_path = r"\C:\python\selenium\web_driver\chromedriver.exe"

service = Service(executable_path=driver_path)
driver = webdriver.Chrome(service=service)

Seleniumの基本的な使い方(Googleでの検索結果の取得と保存)

ではまず手始めに、Googleのページを3秒間表示してブラウザを閉じてみます。
表示させたいURLをdriver.get("URL")に記述します。

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

driver_path = r"\C:\python\selenium\chromedriver.exe"

service = Service(executable_path=driver_path)
driver = webdriver.Chrome(service=service)

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

time.sleep(3)
driver.quit()

chromeは自動テストソフトウェアによって制御されています。」というメッセージが表示されています。

自動的にブラウザが閉じれば成功です。

要素の取得

SeleniumWebブラウザの自動化をするためには、そのブラウザ内で使用されている要素を取得する必要があります。
WebDriverには標準のロケータが8種類あります。
以下の8種類の要素に対して実行したい操作を記述していくという流れで自動化を進めます。

ロケータ 詳細
class name class名に値を含む要素を探す (複合クラス名は使えない)
css selector CSSセレクタが一致する要素を探す
id id属性が一致する要素を探す
name name属性が一致する要素を探す
link text a要素のテキストが一致する要素を探す
partial link text a要素のテキストが部分一致する要素を探す
tag name タグ名が一致する要素を探す
xpath XPathと一致する要素を探す

ページ内の要素が複数ある場合は、複数系の「s」がついたメソッドを利用します。
取得した内容はリストとして扱われます。

要素の操作

要素に対して実行できるコマンドは次の5つです。

  • click (どの要素にも実行可能)
  • send keys (テキスト フィールドとコンテンツの編集可能な要素にのみ実行可能)
  • clear (テキスト フィールドとコンテンツの編集可能な要素にのみ実行可能)
  • submit (フォーム要素にのみ実行可能)
  • select (リスト要素の選択で実行可能) ※

※selectは要素のタイプによって動作が異なります。詳しくは、Seleniumのドキュメントを確認ください。 www.selenium.dev

ブラウザの要素確認

実際にWEBページの取得したいデータの場所を特定し、elementを取得する必要があります。
ここが大変ですが、「Google Chrome」のデベロッパーツールで確認できます。

Google Chromeの縦三点リーダー」→「その他のツール」→「デベロッパー ツール」を押下、またはショートカットキーの「F12」もしくは「Ctrl+Shift+I」で起動します。

左上の要素選択モードのアイコンをクリックします。ショートカットは、「Ctrl+Shift+C」です。

ログインページのサンプル

実際にPythonSeleniumを使用して自動化を行ったログインページです。

ユーザー名の要素確認結果

パスワードの要素確認結果

ユーザー名とパスワードの値を入力して自動ログイン

# アイテムの取得
login = driver.find_element_by_name('userName-inputEl')
password = driver.find_element_by_name('password-inputEl')

# テキスト送信
login.send_keys("admin")
password.send_keys("password")

# ボタンのクリック
driver.find_element_by_id("loginBtn-btnEl").click()

XPathによる検索

要素の特定が難しい場合は、直接パスを指定することも可能です。
要素を選択した状態で、右クリック「copy」を選択することでXPathをコピーできます。

XPathの取得

//*[@id="loginBtn-btnInnerEl"]

▼full XPathの取得

/html/body/div/form/div[3]/a/span/span/span[2]

今後の発展

現在、ブラウザの表示とデータの収集までできるようになったので、取得したデータの加工も自動化できるように勉強中です。PythonSelenium以外のツールを利用して、他の定型業務も自動化していきたいと考えております。
また、機会があればその内容をまとめてみたいと思います。

さいごに

PythonSeleniumを使用したWebスクレイピングの話を紹介しました。
みなさんも自動化で業務の効率化をされてはいかがでしょうか。
ただし、

  • データ取得先のサーバーへの過度な負荷をかけないこと
  • 利用規約を守ること
  • 著作権法を守ること

について、くれぐれもご注意ください。


エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
20210916153018
https://career-recruit.rakus.co.jp/career_engineer/

カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.com

ラクスDevelopers登録フォーム
20220701175429
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/

イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!

◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.