0
1

Selenium / Python : クリックしないと出てこないドロップダウンの中のli要素(さらに a要素で括られてるけど)の選択

Last updated at Posted at 2024-02-09

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) など、ウェイトを入れています。

0
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
0
1