[macOS Catalina 10.15.7]
前回の続きです。
eQSLサイトに移動局コールサインを登録しているかどうかを確認し、登録していなければ末尾なしのコールサインへeQSLカードを送付するようADIFファイルを書き換える、といった内容です。
VBAでも同様の作業ができるかどうか検証したいところですが、Mac版Excelではスクレイピングができないので気が向けばWindows版Excelで試してみます。
<前編からの続き>
driver = webdriver.Chrome()
window_num = 1
for i,call in enumerate(call_l):
print(call)
print(f'コールサイン文字数 {len(call)}')
if len(call) == 8:
# eQSlサイトのURLを取得
driver.get("https://www.eqsl.cc/QSLcard/Home4G.cfm")
WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH, "/html/body/div[2]/form[2]/font/input[2]")))
# 検索窓にコールサインを入力する
driver.find_element_by_xpath("/html/body/div[2]/form[2]/font/input[1]") \
.send_keys(call)
tm.sleep(1)
# 検索ボタンをクリックする
driver.find_element_by_xpath("/html/body/div[2]/form[2]/font/input[2]") \
.click()
# 新しいウィンドウへ遷移する
handle_array = driver.window_handles
driver.switch_to.window(handle_array[window_num])
WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='CFForm_1']/input[2]")))
# 検索結果の文字列を取得する
text = driver.find_element_by_xpath("/html/body/center/h2/font").text
print(text)
# 検索結果にnotおよびyetが含まれていたらコールサインの末尾2文字を削除しADIFデータを書き換える
# 検索結果例:"JA3AAA/3 is not registered yet"
if 'not' in text and 'yet' in text:
new_str1 = data_l[i].replace('<CALL:8>','<CALL:6>')
new_str2 = new_str1[:14] + new_str1[16:]
print(new_str2)
# ADIFデータを置き換える
data_l[i] = new_str2
window_num +=1
# ブラウザを閉じる
driver.quit()
# AGIFデータを改行コードで連結する
data_l2 = '\n'.join(data_l)
# ヘッダとAGIFデータを結合する
header = '<PROGRAMID:6>HAMLOG\n<ADIF_Ver:5>3.1.0\n<EOH>\n'
final = header + data_l2
# 結合したデータをadiファイル(プレーンテキスト)に変換する
filename2 = f"/adif/{datetime_now_str}_adif.adi"
with open(filename2, "w", encoding="shift_jis") as f2:
f2.write(final)
# 前編で作成したCSVファイルを削除する
os.remove(filename)
作成されたADIFファイルの一例です。
<PROGRAMID:6>HAMLOG
<ADIF_Ver:5>3.1.0
<EOH>
<CALL:6>JA3AAA<QSO_DATE:8:D>20210602<TIME_ON:4>0611<BAND:2>2m<MODE:2>FM \
<RST_SENT:3>59+<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E<QSLMSG:6>CU 73! \
<APP_EQSL_AG:1>Y<GRIDSQUARE:4>AA00<EOR>
<CALL:6>JZ3ZZZ<QSO_DATE:8:D>20210602<TIME_ON:4>0730<BAND:4>70cm<MODE:2>FM \
<RST_SENT:3>59+<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E<QSLMSG:6>CU 73! \
<APP_EQSL_AG:1>Y<GRIDSQUARE:4>AA00<EOR>