はじめに
皆さんこんにちは。インフラエンジニアやってますmoja_chiroです。
今回はPythonとSeleniumを使用してちょっとした自動化を行い、業務効率UPを目指しました。
日々の運用業務の中で月次集計のレポート作成で手間と時間が取られていたため、データの集計作業(コピペ)を自動化させて楽になりました。帰宅前にPythonプログラムを実行しておくと、翌日出社したタイミングではエクセルに結果が保存されているという内容です。
一部Seleniumではなく、PyAutoGUIも使用しました。
一部のコードを記載しておりますが、あくまで個人の業務効率UPを目的としているため、コードの不備はあらかじめご了承ください。
- はじめに
- Pythonとは
- Seleniumとは
- Pythonをインストール
- Seleniumをインストール
- WebDriver(ChromeDriver)のインストール
- Seleniumの基本的な使い方(Googleでの検索結果の取得と保存)
- XPathによる検索
- 今後の発展
- さいごに
Pythonとは
Pythonとは、組み込み開発、WEBアプリケーション、デスクトップアプリケーションなどで利用されるプログラム言語です。
インフラ畑の人間からすると、プログラム言語っていうと敷居が高いイメージです。
Pythonを検索すると、人工知能や機械学習の分野やWebアプリ開発でよく利用されており人気の言語らしいです。
言語としての特徴は、文法がとてもシンプルで、標準ライブラリや外部ライブラリが多く、初心者でも扱いやすい言語です。
▼公式ドキュメント www.python.org
▼Wikiペディア ja.wikipedia.org
Seleniumとは
Seleniumとはブラウザーの自動化を可能にし、ブラウザを自動的に操作するツールとライブラリーです。
▼Seleniumの公式ページ www.selenium.dev
Pythonをインストール
まず始めにPythonの環境を構築する必要があります。
▼公式ページ www.python.org
- Python公式サイトから、Pythonパッケージをダウンロードします。
- ダウンロードしたパッケージをインストールします。
- PowerShellでPythonを実行するときに必要となる、スクリプトの実行許可を設定します。
ダウンロードからインストール手順はこちらのサイトが分かりやすいと思います。
▼Windows版Pythonのインストール www.python.jp
ウィザードの中で出てくるパスを通しておく必要があります。
※Add python.exe to PATH
のチェックを入れる
また、開発するにあたってはPython実行環境を構築する必要があります。
次のコマンドを入力して、仮想環境を構築します。
C:\Users\user1\sample1>python -m venv virtual_environment
・仮想環境への切替
WindowsのPowerShellを使用する
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」のバージョンに合わせます。
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は自動テストソフトウェアによって制御されています。」というメッセージが表示されています。
自動的にブラウザが閉じれば成功です。
要素の取得
SeleniumでWebブラウザの自動化をするためには、そのブラウザ内で使用されている要素を取得する必要があります。
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」です。
ログインページのサンプル
実際にPythonとSeleniumを使用して自動化を行ったログインページです。
ユーザー名の要素確認結果
パスワードの要素確認結果
ユーザー名とパスワードの値を入力して自動ログイン
# アイテムの取得 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]
今後の発展
現在、ブラウザの表示とデータの収集までできるようになったので、取得したデータの加工も自動化できるように勉強中です。PythonのSelenium以外のツールを利用して、他の定型業務も自動化していきたいと考えております。
また、機会があればその内容をまとめてみたいと思います。
さいごに
Python
とSelenium
を使用したWebスクレイピングの話を紹介しました。
みなさんも自動化で業務の効率化をされてはいかがでしょうか。
ただし、
について、くれぐれもご注意ください。
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/
カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.com
ラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/
イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com