[サンプルあり] Pyautogui/SeleniumでCSVダウンロード!システム連携で使えるRPAプログラミング

はじめてのPythonxRPAでのブラウザ自動処理のサンプルスクリプトを掲載しています。

RPAでブラウザを自動操作し、特定の条件でCSVダウンロードを行う流れをpyautoguiで実装しました。このブログでは、そこで使用したスクリプトを掲載&解説しています。

PythonxRPAやってみたい!という方にぜひ読んでいただけたらと思います。特に、今回は、弊社で使用しているタイムシートシステムのCloudLogからデータをダウンロードする方法を記載していますのでCloudLogユーザは是非参考にしていただけると幸いです。

環境

Python 3.10.8
Windwos 11
ChromeDriver 106.0.5249.61

準備

Python3.10のインストール

https://pythonlinks.python.jp/en/index.htmlのリンクからダウンロードしてインストールします。

pipのインストール、パスの設定

ダウンロードした、pythonのインストーラを再度実行して、pipと環境変数の設定をします。インストールのタイプを「modify」を選べばそうなりますので、お試しください。

selenium、pyautogui、chromedriver_binaryのインストール

pip install selenium
pip install pyautogui
pip install chromedriver_binary

ChromeDriverのダウンロード

https://chromedriver.chromium.org/downloadsからダウンロードしCドライブ直下に置きます(場所はどこでもいいですが、本スクリプトではC直下においているため)

スクリプト



import webbrowser
import pyautogui
import time
import pyperclip
import glob
import shutil
import os

from selenium import webdriver
import chromedriver_binary
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

#######################################
# 変数定義
#######################################
#Webログインのためのログイン情報
mail_address = "ログインID"
passwd = "パスワード"
#CSVで落としているファイルの保存先と、保存後のファイル移動先
download = "C:/Users/user/Downloads/*"
newfile = "G:/マイドライブ/work.csv"

#chromeドライバ読み込み
driver = webdriver.Chrome(executable_path="C:\chromedriver.exe")

#CSVダウンロードページURL
driver.get("https://app.crowdlog.jp/login.cgi?url=%2Fdownload%2F%3Frm%3Dcost")

#クリップボードにログインIDコピー
pyperclip.copy(mail_address)

#ログインID入力部分のautocompleteデータの削除
pyautogui.hotkey('ctrl', 'a')
pyautogui.press('delete')

#ログインID貼り付け
pyautogui.hotkey('ctrl', 'v')

#パスワード入力へ移動&貼り付け
pyautogui.press('tab')
pyperclip.copy(passwd)
pyautogui.hotkey('ctrl', 'v')

#ログイン実行
pyautogui.press('enter')

#ダウンロード条件 ラジオボタンチェック IDで指定
enable_element = driver.find_elements(By.ID, "idCheckProjectAll")
enable_element[0].click()

#ダウンロード条件 ラジオボタンチェック IDで指定
enable_element = driver.find_elements(By.ID, "idCheckMemberAll")
enable_element[0].click()

#ダウンロード条件 name属性で指定
enable_element = driver.find_elements(By.NAME, "unit_mm")
#2つ目の選択肢をクリック
enable_element[1].click()

#ダウンロード条件 name属性で指定
enable_element = driver.find_elements(By.NAME, "term")
#2つ目の選択肢をクリック
enable_element[1].click()

#カレンダー指定 send_keysでやると、デフォルトのinput内のvalueに追記になるので一度消している
enable_element = driver.find_elements(By.CSS_SELECTOR, ".input-daterange input")
enable_element[0].send_keys(Keys.CONTROL, 'a')
enable_element[0].send_keys(Keys.BACKSPACE)
enable_element[0].send_keys("2021-01");
enable_element[1].send_keys(Keys.CONTROL, 'a')
enable_element[1].send_keys(Keys.BACKSPACE)
enable_element[1].send_keys("2023-08");

# 3秒待機
time.sleep(3)

# 送信
enable_element = driver.find_elements(By.CLASS_NAME, "btn-primary")
enable_element[0].click()

# 3秒待機
time.sleep(10)

#ファイル上書き
# 変更前ファイル
files = glob.glob(download)
for file in files:
    if 'work_202' in file:
        path1 = file

# 変更後ファイル
path2 = newfile

# ファイルが有れば削除
if(os.path.isfile(newfile)):
    os.remove(newfile)

# 移動
shutil.move(path1, path2)

# ログアウト
driver.get("https://app.crowdlog.jp/logout.cgi")


最後に

ネットでググりながら、おおよそ2時間でこのスクリプトができました。ほんとに便利な世の中ですね。なかなかプログラミング初心者には難しいとは思いますが、多少何かしらの言語の経験がある人に取ってみると結構すんなり行く感じかと思います。

今回、この仕組を取り入れた目的はGoogle Data Studioとの連携です。
Google Driveにこのスクリプトから出力したデータを保存し、自動的に同期をかけ、Google Data Studioのデータソースを更新しています。

今までは、庶務の方が毎日出社するたびに、手作業でCSVダウンロードとインポートを行ってましたがついにその業務ともサヨナラです。教科書どおりのDXですが、こういったことこそ、地味によいデジタル活用ですよね。是非、みなさまのDXライフに活用できる情報になったらなと思います。

 

[参考]
・Selenium API/メソッド集https://www.seleniumqref.com/api/webdriver_gyaku.html
Seleniumのバージョンが新しかったためか、インターネットの記事にあるメソッドが使用できず、いろいろと苦労あり。このまとめ記事のお陰で大変助かりました。