Pleasanter の一覧表示のレコードに対して更新を自動化する
ベースは以前作成したスクリプトより
かなり前ですが Python + Selenium + Chrome を利用したスクリプト(G Suite のメールログ収集スクリプト)を Github に公開しており、今回は Pleasanter 用に改変しました。単一スクリプトで環境さえあればすぐに実行可能ということもあり、今回は当ブログ上にそのまま記載してしまいます。
どんな時に利用するのか?
Pleasanter のスクリプト更新タイミングにもよるのですが、編集画面から「更新」を押下した際にデータ更新を実施する場合を想定しております。自環境で編集が必要そうなところは括弧書きしておりますので適宜変更願います。
# Python + Selenium + Chrome # # Pleasanter の 一覧画面から編集に入ってデータ更新を実施 # 必要なライブラリのインポートを行う import sys import time import calendar from datetime import datetime, date, timedelta from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # コマンドラインからの引数を拾う # args[1] none or retry # args[2] number (minute) args = sys.argv # 初期値作成 login_id = "(Pleasanter Username)" password = "(Pleasanter Password)" # Chrome 用の WebDriver インスタンスを作成し認証画面を開く # - 適宜パス名は変更願います driver = webdriver.Chrome("c:/driver/chromedriver.exe") # Pleasanter Access URL driver.get('(Pleasanter Login URL)') # 認証部分 time.sleep(1) driver.find_element_by_xpath("//*[@id='Users_LoginId']").send_keys(login_id) time.sleep(1) driver.find_element_by_xpath("//*[@id='Users_Password']").send_keys(password) time.sleep(1) driver.find_element_by_xpath("//*[@id='Login']").click() # 更新したい一覧ページへのアクセス time.sleep(3) driver.get('(Pleasanter Target List URL)') # 各行のリンクを発見して配列に入れる、またリトライ用に更新時間も入れる。 urlArray = [] urlTimeArray = [] # 現在時刻取得 # - unixtime_now 現在時刻の UNIX TIMESTAMP # - unixtime_past n分前以前のものを更新する際に利用(リトライ時に使用) now = datetime.now() unixtime_now = int(now.timestamp()) unixtime_past = unixtime_now - (int(args[2]) * 60) # テーブルの要素から更新に必要なデータを収集する # - 取得位置(3 や 11 に関しては一覧の並び順にもよる為、定義変更願います。) tableElem = driver.find_element_by_class_name("grid") trs = tableElem.find_elements(By.TAG_NAME, "tr") for i in range(1, len(trs)): tds = trs[i].find_elements(By.TAG_NAME, "td") urlArray.append(tds[3].find_element_by_tag_name("a").get_attribute("href")) tm = tds[11].text datetime_tm = datetime(int(tm[0:4]),int(tm[5:7]),int(tm[8:10]),int(tm[13:15]),int(tm[16:18]),int(00),0000) unixtime_tm = calendar.timegm(datetime_tm.timetuple()) urlTimeArray.append(unixtime_tm - 32400) # urlArray の配列をベースに1行1行更新する i = 0 if args[1] == 'none': # none mode for url in urlArray: time.sleep(1) driver.get(url) time.sleep(1) formElem = driver.find_element_by_id("MainCommands") buttons = formElem.find_elements_by_tag_name("button") buttons[1].click() time.sleep(3) driver.get('(Pleasanter Target List URL)') else: for url in urlArray: #retry mode if urlTimeArray[i] < unixtime_past: time.sleep(1) driver.get(url) time.sleep(1) formElem = driver.find_element_by_id("MainCommands") buttons = formElem.find_elements_by_tag_name("button") buttons[1].click() time.sleep(3) driver.get('(Pleasanter Target List URL)') i = i + 1 else: i = i + 1 # 終了(終了時に5秒 Wait) time.sleep(5) driver.close()