このプログラムの趣旨
お客様へYamahaのルータであるRTXシリーズのリリース情報をお客様に提供する機会があり、毎回コピペしてエクセルに貼り付けるのは非効率だと思って自動化してみた。今回はSeleniumのWrapperであるHeliumというものを使用。
※一部Seleniumの機能を呼び出して使用
[Python : Heliumを使用したブラウザ操作
](https://zenn.dev/nakaie/articles/3ab2c36dcc12cb "Python : Heliumを使用したブラウザ操作")
<h2>プログラム処理のざっくり概要</h2>
・あるバージョンのリリースノートのURLをプロンプトから受け取る
・受け取ったURLへアクセス
・バグ情報内のli要素を取得して、テキスト情報をリスト化
・リストの中身をCSVへ出力
<h2>プログラムの中身</h2>
```RTX_Bug_Fixed_Info.py
from helium import *
import csv
# バージョン情報の入力をユーザーに促す
version_info = input("該当のバージョンを入力してください:")
# リリースノートURL入力をユーザーに促す
target_url = input("該当バージョンのリリースノートのURLを入力してください:")
# バグ修正情報内のli要素のXPATH入力をユーザーに促す
bug_xpath = input("バグ修正情報箇所のXPATHを入力してください:")
# Chromeをヘッドレスモードで起動
# Seleniumの機能を呼び出すために、一旦変数に格納
driver = start_chrome(target_url, headless=True)
driver
# CSV書き込みの準備
file_name = version_info + "_bug_fixed_info.csv"
with open(file_name,'a', newline='') as result_csv:
writer = csv.writer(result_csv, lineterminator='\n')
# バグ修正情報記載箇所からli要素を全て取得しリスト化
bug_fix_info_cells = driver.find_elements_by_xpath(bug_xpath)
# li要素からテキスト情報を取得しリスト化
bug_fix_info = [_bug_fix_info.text for _bug_fix_info in bug_fix_info_cells]
# CSV書き込み時のインデックス番号準備
index_num = 1
# 上記リストを1行ずつCSVへ書き込み
for info in bug_fix_info:
writer.writerow([index_num, info])
index_num +=1
print(file_name + "への書き込みが完了しました。")
```
XPATHの入力をユーザーに促すのは、ユーザビリティ的にはよくない。
しかしながら、YamahaのリリースノートのHTML構造が毎度異なるので致し方なく。。。
バグ修正情報の一覧を取得する場合、まずはli要素を右クリックしてFULL XPATHをコピーする
```
/html/body/ol[3]/li[1]
```
そして、li[1]の[ ]部分を削除する。
```
/html/body/ol[3]/li
```
上記をプロンプト画面で入力すれば情報一覧を取得可能になる。
できあがったCSVファイルは以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/591cbbe8-a2ef-e8c3-a66e-8a84e2eb3e1e.png)
そのままだと見にくいので、適宜幅の調整などをしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316676/d4e13552-6d3f-3793-c4d9-3e2ea81cd597.png)
一部つまって作成に数時間かかってしまったけど、今後のコピペ作業がだいぶ削減できたので問題なし。