実現したいこと
HTMLのtd要素への手動入力をpythonを使って自動化したいです。
発生している問題・分からないこと
手動入力した場合はtd要素に入力した文字列をダブルクリックすると、
編集モードとなり入力した文字列を編集できます。
そして該当するソースコードを実行すると、見た目的には文字列は入ってくれます。
開発者ツールで確認したPythonで入力した要素は以下のようになっています。
HTML的には手動入力したものと同じにできています。
html
1<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」をダブルクリックした画像です。
以下は手動入力した文字列をダブルクリックした画像です。
入力した文字列を編集できます。
該当のソースコード
python
1def set_time_in_row(row, times): 2 time_row_index = [9, 10, 16, 17] 3 for i, time in enumerate(times): 4 input_element = row.find_element(By.XPATH, f'.//td[@data-x="{time_row_index[i]}"]') 5 driver.execute_script(f"arguments[0].innerText = '{time}';", input_element)
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
以下のようにも修正してみましたが、
ダブルクリックされるだけでテキストは入力されません。
他にもsend_keysも試してみましたが、input要素ではないためかエラーが起きて使えませんでした。
python
1def set_time_in_row(row, times): 2 time_row_index = [9, 10, 16, 17] 3 actions = ActionChains(driver) 4 for i, time in enumerate(times): 5 input_element = row.find_element(By.XPATH, f'.//td[@data-x="{time_row_index[i]}"]') 6 # セルをダブルクリックして編集モードに入れる 7 actions.double_click(input_element).perform() 8 9 # 編集モードに入るのを待つ 10 sleep(0.5) 11 12 # JavaScriptで値を設定 13 driver.execute_script("arguments[0].innerText = arguments[1];", input_element, time) 14 15 # 編集を完了させるためにblurイベントを発火 16 driver.execute_script("arguments[0].dispatchEvent(new Event('blur'));", input_element)
手動入力の方法としてはもう一つ、入力したいtd要素をシングルクリックしてそのまま「09:00」と入力すると自動で編集モードになってくれます。
これを利用して上記ソースのdouble_clickをclickにもしてみましたが、結果は変わらずでした。
このtd要素にはjava scriptが何か動いていて、そもそも自動化は難しいとかでしょうか。
補足
特になし
回答2件
あなたの回答
tips
プレビュー