3
1

More than 3 years have passed since last update.

【Python初心者】社内業務の自動化(Webスクレイピング編)

Last updated at Posted at 2020-12-05

自己紹介

ITでもプログラマでもない、生産系のEngineerです。
現在の業務も、プログラミングは必要ありませんが、自部門の業務改善に
 『Pythonのプログラミングが役にたつのでは?』
という、かなり単純な考えのもと、2020年9月から個人的にプログラミングを勉強し始めました。
最初の3か月間は、とにかく基礎的なことを身に着けるのに徹しました。
 『そろそろ、具体的に動くプログラムを作って業務に適用してやろう!』
と思い、ググりまくりながらプログラムを書いています。

取り組み内容

各種社内システムを使った、データの入力・登録・参照・更新などの業務が多々あります。
人頼りのやり方なので、データ量や頻度が多くなると(少なくてもですが...)、時間(工数)が増大しミスも増えます。
システム改修がいちばんと思いますが、予算、工数など現実的ではありません。
そこで、解決する手段として機械化(自動/半自動)を考えた。ツールは、無償・個人で取り組める、Python + Selenium でのWebスクレイピングを試すことにしました。

社内システム:
 ・物品の管理台帳システム
 ・InternetExplorer11上で動作
 ・物品の登録、使用者、使用場所、入出庫の履歴管理など

1.環境構築

Python3は構築済み。
ライブラリ selenium を使うことにした。

selenium インストール

Python3
pip install selenium

Webドライバ

使用するWebブラウザにあったWebドライバが必要。
ドライバは、ルートに置くかパスを通す。

InternetExplorer

下記から、IEDriverServer.exe をDL。
http://www.seleniumhq.org/download/
【IEの設定】
〔インターネットオプション〕⇒〔セキュリティ〕
 インターネット、ローカルイントラネット、信用済みサイト、制限付きサイト、4つのセキュリティレベルを合わせる。「保護モードを有効にする」にチェック。
〔詳細設定〕
 「拡張保護モードで64ビットプロセッサーを有効にする」を”有効”にする。
(下記を参考にしました)
某氏の猫空
https://blog2.k05.biz/2020/06/python-selenium-ie.html

ChromeDriver

現在使用しているブラウザとドライバのバージョンを合わせる。
https://chromedriver.chromium.org/downloads

2.コーディング

必要なライブラリなどをインポートし、Google で検索してみる。

Selenium
import time
from selenium import webdriver

driver = webdriver.Ie()       # IEDriverServer
# driver = webdriver.Chrome() # ChromeDriver

driver.get('https://www.google.com/')
time.sleep(5)
search_box = driver.find_element_by_name("q")
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5)
driver.quit()

3.トライ結果

ブラウザ上の情報にアクセスするロジックはいたってシンプルで、簡単に情報を取得、入力、保存などができることがわかりました。
HTMLに記述されている、idnameなどで、ターゲットを見つる。
valueを取得したり、send_keysで値を書き込むことができる。
clickでボタンを押し下げすることも可能。
必要に応じてメソッドを調べていくことでなんとかなりそうな感じであることが確認できました。。

上記テストの後、実際に社内システムのWeb画面にアクセスし、値の取得、書き込み、保存を行いました。。
プログラミング歴3か月、Webスクレイピングは初めてのスキルですが、約2日の短期間ででき、こんなに簡単なら、
 『もっと早よからやってみりゃ良かった!』
と実感です。

4.課題

とりあえず、人が操作している通りの動作をさせることができたのと、入力値のログファイルを作成することができたので、目的は達成できました。が、
 『動作が遅い!!』
これでは、数件の処理には対応できますが、数十件~数百件の処理は実用に耐えません。
find_elment_by_idを使って、HTML内の要素を探し、
getAttribute()でbox内の値の取得:16か所
select_by_idでリストの値の取得:3か所
行うのに、8秒ほどかかります。

もっと速い処理はできるのでしょうか??

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1