[Chat GPT]Chat GPTで作成済みのコードを修正させてみた。Python

ホーム » プログラミング » [Chat GPT]Chat GPTで作成済みのコードを修正させてみた。Python

対象者

Chat GPTを使用してコードの修正を行いたい方
Chat GPTで何ができるか知りたい方

Chat GPT事前準備

Chat GPTの始め方を知りたい方はこちら

実際のコード

今回使うコードは下記になります。
スクレイピング用のコードです。
※Webサイトの操作を自動化するものです。
 クリックや値入力など定形作業の自動化によく使われています。
作業の流れとしては
①エクセルからデータを取得
②メールアドレスを入力して検索
③完全一致するとチェックを付ける
④対象のアカウントを削除の流れです。

from cgitb import html
import openpyxl
import time
import datetime
from selenium import webdriver


dt_now = datetime.datetime.now()
nowyeare = (dt_now.year)
nowmonth = (dt_now.month-1)

print(nowyeare)
print(nowmonth)

yameta_book = openpyxl.load_workbook("エクセルファイル名.xlsx")

yameta_sheet = yameta_book['Sheet1']

time.sleep(3)

#最大行
maxrow = yameta_sheet.max_row
#最大列
maxclm = yameta_sheet.max_column
# 開始行
startrow =yameta_sheet.min_column
# 開始列
startclm =yameta_sheet.min_row

s = 3
i = 3
print(maxrow)

yameta_name =[]
yameta_adress = []

while i <= maxrow:
    yameta_list2 =yameta_sheet.cell(row=s, column=3).value 
    yameta_name.append(yameta_list2)
    i = i + 1
    s = s + 1 
    print(yameta_name)
else:
    print(yameta_name)

s = 3
i = 3

while i <= maxrow:
    yameta_list =yameta_sheet.cell(row=s, column=6).value 
    yameta_adress.append(yameta_list)
    i = i + 1
    s = s + 1 
    print(yameta_adress)
else:
    print(yameta_adress)

# -----------退職一覧からデータ取得---------------------
driver = webdriver.Firefox()
driver.get("管理画面")
# 1.5 秒 止める
time.sleep(1.5)

login_id = driver.find_element_by_xpath("/html/body/form/center/table/tbody/tr[2]/td/table/tbody/tr[1]/td[2]/input")
login_pw = driver.find_element_by_xpath("/html/body/form/center/table/tbody/tr[2]/td/table/tbody/tr[2]/td[2]/input")

userid = "管理画面のID" 
userpw = "パスワード"

login_id.send_keys(userid) #ログインID
login_pw.send_keys(userpw) #ログインパスワード

time.sleep(1)

login_btn = driver.find_element_by_xpath("/html/body/form/center/table/tbody/tr[2]/td/table/tbody/tr[3]/td/input[2]")#ログインボタン
login_btn.click()
time.sleep(2)

# ---------ログイン画面----------

iframe = driver.find_element_by_css_selector("html > frameset:nth-child(2) > frame:nth-child(1)")#iframeをCSSセレクタで特定

driver.switch_to.frame(iframe)#親フレームからiframeに移動

masuta_btn = driver.find_element_by_xpath("/html/body/table[2]/tbody/tr/td[3]/a")
masuta_btn.click()
time.sleep(2)
syainmasuta_btn = driver.find_element_by_xpath("/html/body/table[3]/tbody/tr/td[5]/a")
syainmasuta_btn.click()
time.sleep(2)
serch_btn = driver.find_element_by_xpath("/html/body/table[3]/tbody/tr/td[1]/a")
serch_btn.click()
time.sleep(2)
driver.switch_to.default_content()#フレームを一度終了する

disp = driver.find_element_by_css_selector("html > frameset:nth-child(2) > frame:nth-child(2)")
driver.switch_to.frame(disp)#フレームを切り替える
syain_name = driver.find_element_by_xpath("/html/body/table[2]/tbody/tr[2]/td[2]/input")#
time.sleep(2)

#----------------------------------------検索画面まで

for taisyokusya in yameta_name:
    syain_name.send_keys(taisyokusya)
    kensaku_btn = driver.find_element_by_xpath("/html/body/table[2]/tbody/tr[2]/td[3]")#検索ボタン
    kensaku_btn.click()#検索ボタン押す
    time.sleep(2)
    try:
        mailadress = driver.find_element_by_xpath("/html/body/table[3]/tbody/tr[2]/td[9]").text#検索ヒットした人のメールアドレス
        # print(mailadress)
        for taisyokusya2 in yameta_adress:
            if mailadress == taisyokusya2:
                delete_btn = driver.find_element_by_xpath("/html/body/table[3]/tbody/tr[2]/td[11]/table/tbody/tr[2]/td/input[4]")
                delete_btn.click()
                print(taisyokusya2)
                time.sleep(2)
                delete2_btn = driver.find_element_by_xpath("/html/body/center/form/input[5]")
                delete2_btn.click()
                time.sleep(2)
                back_btn = driver.find_element_by_xpath("/html/body/center/form/input")
                back_btn.click()
                pass
    except:
        syain_name = driver.find_element_by_xpath("/html/body/table[2]/tbody/tr[2]/td[2]/input")#社員名
        syain_name.clear()
        pass    

driver.switch_to.default_content()

コードを修正させてみた

早速上記のコードを入力して、効率化できるか見てみましょう。
コード入力後最終行に、効率化してと入力してみます。
そうすると、下記画像のように返答がありました。

ふむふむ、2つ効率化できる場所があるそうです。
1つ目はWhileで値を取得している箇所を、forに変更するということですね。
現在それぞれを一つずつの処理にしていますが、まとめて一つの処理にしようということみたいです。

二つ目は、現在無条件で何秒間待機して次の処理に移行するのですが
それを、対象の動作ができるまで待機して処理に移行するようです。
※今回は10秒待機なので、それ以上ページの読み込みなどに時間がかかると処理できません。

一つ目の、処理をまとめる箇所は修正前から予測していましたが
二つ目の待機時間は、予想外でした。
他にはもうないかなと思いながらも、再度下記の質問をしてみました。
「他に修正したほうが良いところはある」

①変数名の命名
 はい、おっしゃる通りです。
 部署内で私しか触っていなかったコードなので、適当なアルファベットにしておりました。
②例外処理の改善
 こちらもそうですね。
 ただこれは、当時の部長に言われて無理やりこの処理に変えたような記憶です
③Seleniumの処理の改善
 当時の私には冗長かどうかわかっていませんでしたね。
 属性はXpathで基本取得していますね。
 サイトの構造変更になっても問題ないようにID、Classを取得しろということですかね。

④関数の使用
 これは当時も言われていましたね。
 保守の効率化のためにも、関数にしてくれと
 ただ、正直自分がいなくなった後は、、、
 良くないですね。保守性も考えましょう。
⑤コメントの追加
 ④と一緒ですね。
 自分だけがわかるコードは本当に良くないですね。

最後に


保守するときに、コードを読み込ませて効率化してみるのはありかもしれませんね。

平凡太郎
平凡太郎

Chat GPTでコードの
修正・効率化もできるのでやってみましょう!

[Chat GPT]Chat GPTオススメの使用方法とPowershell作成してみた。
[Chat GPTでPython]Chat GPTを使用してPythonプログラム作成してみた。
[Chat GPTでGAS]Chat GPTを使用してGASを作成してみた。

タイトルとURLをコピーしました