seleniumでwebスクレイピング SBI証券

Python

・環境

selenium 4.25

windows 11

・SBI証券のNISA口座の残高取得

webスクレイピングの練習用にSBI証券からNISA口座の情報を取得して、自分のGmailに送信するプログラムを作りました

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import datetime

options = Options()
options.add_argument("--headless=new") 
options.add_argument("--disable-dev-shm-usage") 

driver = webdriver.Chrome(options=options)

#IDとパスワード入力
ID="XXX-XXXXXX"
PASS="XXXXXXX"

#SBI証券 ログインページにアクセス
driver.get("https://www.sbisec.co.jp/ETGate")

time.sleep(3)

driver.find_element(By.NAME,"user_id").send_keys(ID)
driver.find_element(By.NAME,"user_password").send_keys(PASS)

time.sleep(1)

driver.find_element(By.NAME,"ACT_login").click()

time.sleep(3)

#ポートフォリオページをクリック
driver.find_element(By.XPATH,"//img[@title='ポートフォリオ']").click()

time.sleep(1)

#残高情報(ここはXPATHで指定しているので、人によって変わると思います)
soushisan=driver.find_element(By.XPATH,"/html/body/div[4]/div/table/tbody/tr/td/table[4]/tbody/tr[13]/td/table/tbody/tr/td/table/tbody/tr[2]/td[1]").text
sonneki=driver.find_element(By.XPATH,"/html/body/div[4]/div/table/tbody/tr/td/table[4]/tbody/tr[13]/td/table/tbody/tr/td/table/tbody/tr[2]/td[2]/font").text
sonneki_p=driver.find_element(By.XPATH,"/html/body/div[4]/div/table/tbody/tr/td/table[4]/tbody/tr[13]/td/table/tbody/tr/td/table/tbody/tr[2]/td[3]/font").text

driver.find_element(By.XPATH,"//img[@title='ログアウト']").click()

time.sleep(1)

driver.quit()

#今日の日付取得
today = datetime.datetime.now()
today_str=today.strftime("%Y年%m月%d日")

#gmailの本文定義
msg = MIMEMultipart('alternative')

#htmlが受け取れる場合
html =f"""
<!doctype html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>HTML Sample</title>
</head>
<body>
    <h1>SBI証券 NISA 残高</h1>
    <h2>{today_str}</h2>
    <p>総資産 {soushisan}</p>
    <p>損益 {sonneki}</p>
    <p>損益率 {sonneki_p}%</p>
</body>
</html>
"""

part1 = MIMEText("htmlが受け取れない", 'plain')
part2 = MIMEText(html, 'html')

msg.attach(part1)
msg.attach(part2)

#メールの件名
msg["Subject"]="SBI NISA"

#あなたのGmailアドレス
msg["From"]="XXXXX@gmail.com"

#メールの送信先
msg["To"]="XXXXX@gmail.com"

smtp=smtplib.SMTP("smtp.gmail.com",587)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()

#Gmailアドレス,あなたのGmailアプリパスワード
smtp.login("XXXXX@gmail.com","XXXX XXXX XXXX XXXX")
smtp.send_message(msg)
smtp.close()

ポップアップが表示されてログインできないとき

ログインページでポップアップウィンドウが表示されてログインボタンが押せない時がありました
以下のコードをログインボタンを押すコードのところに書き換えることで、ボタンを押せるようにしました

#このコードを変更します
driver.find_element(By.NAME,"ACT_login").click()

#以下のコードに書き換え
login_btn=driver.find_element(By.NAME,"ACT_login")

# 要素が画面内に入るようにスクロール
driver.execute_script("arguments[0].scrollIntoView(true);", login_btn)

login_btn.click()

seleniumの基本サンプルコードはこちら

Gmail送信についてはこちら

コメント