HTMLのtd要素への手動入力をpythonを使って自動化したいです。
前提
- Python 3.8.20
- Chromeバージョン: 130.0.6723.92(Official Build) (x86_64)
- chromedriverバージョン: Chromeと同じ
- 対象サイト: とある企業の勤怠入力システム
解決したいこと
HTMLのtd要素への手動入力をpythonを使って自動化したいです。
その方法として、seleniumのwebdriverを使って、以下のtd要素のinnerTextに文字列を入力しようとしています。
<td data-x="9" data-y="34" class="inputtable p-0 pl-1 font-color-black highlight-selected highlight highlight-top highlight-bottom highlight-left highlight-right" style="text-align: center; padding: 2px;"></td>
手動入力した場合はtd要素に入力した文字列をダブルクリックすると、
編集モードとなり入力した文字列を編集できます。
そして該当するソースコードを実行すると、見た目的には文字列は入ってくれます。
開発者ツールで確認したPythonで入力した要素は以下のようになっています。
HTML的には手動入力したものと同じにできています。
<td data-x="9" data-y="35" class="inputtable p-0 pl-1 font-color-black highlight-selected highlight highlight-top highlight-bottom highlight-left highlight-right" style="text-align: center; padding: 2px;">09:00</td>
しかしpythonで入力した文字列はダブルクリックした際に編集できず、非表示になっていしまいます。
以下は「09:00」をダブルクリックした画像です。
以下は手動入力した文字列をダブルクリックした画像です。
入力した文字列を編集できます。
該当するソースコード
以下が実際のソースコードです。
def set_time_in_row(row, times):
time_row_index = [9, 10, 16, 17]
for i, time in enumerate(times):
input_element = row.find_element(By.XPATH, f'.//td[@data-x="{time_row_index[i]}"]')
driver.execute_script(f"arguments[0].innerText = '{time}';", input_element)
自分で試したこと
以下のようにも修正してみましたが、
ダブルクリックされるだけでテキストは入力されません。
他にもsend_keysも試してみましたが、input要素ではないためかエラーが起きて使えませんでした。
def set_time_in_row(row, times):
time_row_index = [9, 10, 16, 17]
actions = ActionChains(driver)
for i, time in enumerate(times):
input_element = row.find_element(By.XPATH, f'.//td[@data-x="{time_row_index[i]}"]')
# セルをダブルクリックして編集モードに入れる
actions.double_click(input_element).perform()
# 編集モードに入るのを待つ
sleep(0.5)
# JavaScriptで値を設定
driver.execute_script("arguments[0].innerText = arguments[1];", input_element, time)
# 編集を完了させるためにblurイベントを発火
driver.execute_script("arguments[0].dispatchEvent(new Event('blur'));", input_element)
手動入力の方法としてはもう一つ、入力したいtd要素をシングルクリックして。そのまま「09:00」と入力すると勝手に編集モードになってくれます。
これを利用して上記ソースのdouble_clickをclickにもしてみましたが、結果は変わらずでした。
このtd要素にはjava scriptが何か動いていて、そもそも自動化は難しいとかでしょうか。
補足
- 対象サイトの時刻入力以外の動作(プルダウンリストやボタンのクリック)は自動化できています。