1.目的
Excelファイルにある情報をグループウェアのCybozu office(クラウド版)のスケジュールに自動で登録したい。
2.やりかた
Excelから情報を取り込む部分は省略。Seleniumでスクレイピングしてテキストボックスなどに記載する方法は、色々資料があるので、これも先人におまかせ。
3.この記事の主題
スケジュール登録をする時に、予定の見出しがドロップダウンで選択できるが、アプリ版では Tableタグで定義されていたものが、クラウド版では liタグ で定義されるようになっていた。
なお、liタグの子要素としてさらにaタグが入ってるので、プログラム上はaタグを探す形になっています。
そこで、この辺りの記事も参考にしながら、やってみたもの一筋縄ではいかず、色々試したところ、最終的には選択できるようになったので、その例。
https://qiita.com/Colours/items/d8be0626a4f46a3a2460
4.実際の方法
この辺りは、とりあえず標準的なもので。
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
Cybozu officeにログインして、スケジュールの入力ページまで遷移
site_address = "http://*****.cybozu.com/o/ag.cgi?" #*****は各社で指定
driver = webdriver.Chrome()
driver.get(site_address)
#ログインとかはこのあと適当に xpathで指定して send_keys で。
#2024/1/1の誰か(***の番号)のスケジュールページを開く
site_address = "http://*****.cybozu.com/o/ag.cgi?page=ScheduleEntry&UID=***&GID=***&Date=da.2024.1.1"
driver.get(site_address)
ここからが、この記事の本題。そしてハマったところ。
1.まずドロップダウンリストを表示させるために、dropdown_buttonをclick
2.出てきたリストから、目的のliタグ(今回は aタグ)を探して、 click
文字にすると簡単ですし出来てみたら当然なんですが、ウェブサイトのソースコードではli要素が直接見えるので、そのままliタグ(今回は aタグ)をClickしようとして、エラーではじかれていました。人間が作業するときと同じ手順を踏んだらできたという話。
drop_down = driver.find_element(By.CLASS_NAME,"dropdown_button")
drop_down.click()
date_menu = "休暇" #ここはリストにある(定義済みの)項目。
#xpathで指定した項目を定義。date_menuの文字が入っている aタグを定義。
xpath = "//a[contains(text(),'" + date_menu + "')]"
#xpathで指定した項目を探して、click
drop_down_body = driver.find_element(By.XPATH,xpath)
drop_down_body.click()
以上、そんなに必要はないかもしれませんが、いろんなサイトの情報にお世話になったので、フィードバックとして記事にしておきます。
なお実際のコードには、適当なタイミングで time.sleep(1) など、ウェイトを入れています。