前回は、「8.ブラウザを開いて閉じる。」について投稿しました。
今回は、openpyxlライブラリを使用して会員・予約情報を取り込みます。
必要なパッケージを importする。
5: from openpyxl import load_workbook
6: import os
詳細処理説明
5: openpyxlライブラリの load_workbook関数をインポートします。
- 会員・予約情報Excelファイル読み込みで使用します。
6: osライブラリをインポートします。
- Excelファイルパス取得で使用します。
定数を定義します。
10: EXCEL_FILENAME = "reserveLessonList.xlsx"
詳細処理説明
10: 会員・予約情報Excelファイル名を定数化しました。
main処理
mainサブで会員・予約情報Excelファイル情報を読み込むgetExcelDicListファンクションをコールする処理を追加しました。20行目です。
12: #******************************************************************
13: # main処理
14: #******************************************************************
15: def main():
16: #ブラウザを開く。
17: driver = openChromBrowser()
18:
19: #会員・予約情報(Excel)を辞書リスト形式で取得する。
20: rsvlst = getExcelDicList()
21: print(rstlst)
22:
23: #chromeドライバー セッション終了
24: driver.quit()
詳細処理説明
20: 会員・予約情報Excelファイルを辞書のリスト形式で取得します。
21: rsvlstの中身確認
会員・予約情報を取得するファンクション-getExcelDicList()
Excelファイルを開き、会員・予約情報を 辞書のリスト変数に取り込みます。
辞書のリスト(rsvlst)の中身
Excelシートの1行はリストの1行に取り込まれ、それぞれの列情報は「列名をキー」に「セル値をバリュー」という辞書形式で格納します。後々処理しやすいので、辞書のリストにしました。この関数を通した結果、この関数の戻り値rsvlstの中身は以下のようになります。
45: #--会員・予約情報を辞書リスト形式で取得する。---
46: def getExcelDicList():
47: #予約一覧Excelファイルパス取得
48: rsv_lst_path = os.path.join(os.getcwd(), EXCEL_FILENAME)
49: #予約一覧を読み込み専用で開く。
50: wb = load_workbook(rsv_lst_path, read_only=True)
51: #予約一覧シートを指定
52: ws = wb["予約一覧"]
53:
54: #* {列名:セル値}の辞書をリスト化する。([{列名:セル値},{列名:セル値},...])
55: header = ws[1] #1行目の列名を取得
56: rsvlst = [] #リスト初期化
57: #予約一覧データ部(2行目~)の行数分処理する。
58: for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
59: rsvinf = {} #辞書初期化
60: #列名:セル値の辞書作成
61: for k, v in zip(header, row):
62: rsvinf[k.value] = v.value
63: #作成した辞書をリストに追加
64: rsvlst.append(rsvinf)
65:
66: #Close ExcelBook
67: wb.close()
68:
69: return rsvlst
詳細処理説明
48: Excelファイルの絶対パスを取得しています。
- os.getcwd()でカレントパスを取得し、os.path.join()でそのパスとExcelファイル名を結合しています。
50: Excelファイル(reserveLessonList.xlsx)を読み取り専用で開いています。
52: 操作する"予約一覧"シートを取得しています。
55: 1行目の列タイトル(ユーザー名、パスワード など)を取得しています。
58: 2行目以降のデータ部分を設定されている行数分ループしています。
- iter_rows()関数を使用してシートの2行目(min_row=2)から順に取得しています。
- 行データは、row変数に設定されます。
59: 辞書変数の初期化
61: zip()関数で複数のタプル情報(header, row)を1つにまとめて、key値、value値を取得しています。
62: rcvinf['ユーザー名'] = 'aaa'、rcvinf['パスワード'] = 12345 といったぐあいになります。
64: できあがった1行分の辞書情報をリストに追加しています。
reserveLesson.pyの全容
1: #各コンポーネントをインポート
2: from selenium import webdriver
3: from selenium.webdriver.chrome import service
4: from webdriver_manager.chrome import ChromeDriverManager
5: from openpyxl import load_workbook
6: import os
7:
8: #--定数----------------
9: LOGIN_URL = "https://google.com" #ログイン画面のURL
10: EXCEL_FILENAME = "reserveLessonList.xlsx"
11:
12: #******************************************************************
13: # main処理
14: #******************************************************************
15: def main():
16: #ブラウザを開く。
17: driver = openChromeBrowser()
18:
19: #会員・予約情報(Excel)を辞書リスト形式で取得する。
20: rsvlst = getExcelDicList()
21: print(rstlst)
22:
23: #chromeドライバー セッション終了
24: driver.quit()
25:
26: #---------------------
27: # SubRoutine
28: #---------------------
29: #--ブラウザを開く。
30: def openChromeBrowser():
31: #Serviceオブジェクトを介して、execute_pathを指定する。
32: chrome_service = service.Service(executable_path=ChromeDriverManager().install())
33: #chromeドライバー セッション開始(最新Ver自動インストール、およびオプション指定)
34: driver = webdriver.Chrome(service=chrome_service, options=getOptions())
35:
36: return driver
37:
38: #--Get ChromeDriver Options------
39: def getOptions():
40: options = webdriver.ChromeOptions()
41: options.headless = False #ヘッドレスモード True:ブラウザ画面非表示、False:表示
42:
43: return options
44:
45: #--会員・予約情報を辞書リスト形式で取得する。---
46: def getExcelDicList():
47: #予約一覧Excelファイルパス取得
48: rsv_lst_path = os.path.join(os.getcwd(), EXCEL_FILENAME)
49: #予約一覧を読み込み専用で開く。
50: wb = load_workbook(rsv_lst_path, read_only=True)
51: #予約一覧シートを指定
52: ws = wb["予約一覧"]
53:
54: #* {列名:セル値}の辞書をリスト化する。([{列名:セル値},{列名:セル値},...])
55: header = ws[1] #1行目の列名を取得
56: rsvlst = [] #リスト初期化
57: #予約一覧データ部(2行目~)の行数分処理する。
58: for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
59: rsvinf = {} #辞書初期化
60: #列名:セル値の辞書作成
61: for k, v in zip(header, row):
62: rsvinf[k.value] = v.value
63: #作成した辞書をリストに追加
64: rsvlst.append(rsvinf)
65:
66: #Close ExcelBook
67: wb.close()
68:
69: return rsvlst
70:
71: #-------------------------------
72: # スクリプト実行時に mainサブコール
73: #-------------------------------
74: if __name__ == '__main__':
75: main()
なんかインプットに必死でアウトプットが雑になってすみません。
知らないことが多すぎて、ググりすぎて、頭パンパンです。
今回は、会員・予約情報をExcelファイルから読み込み、辞書リスト形式の変数に取得する処理を追加しました。次回は、ログインできるところまでできたらいいなぁ