仕事で使用しているアスクルの購入履歴をCSVに保存するため、まず該当ページのhtmlをローカルに保存するコードを書きました。
crwaling.py
import os
from time import sleep
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
#Seleniumで使用するドライババージョンアップ自動化
from webdriver_manager.chrome import ChromeDriverManager
from selenium.common.exceptions import NoSuchElementException
# Selenium初期化
def initialize():
new_driver = ChromeDriverManager().install()
service = ChromeService(executable_path=new_driver)
options = webdriver.ChromeOptions()
options.add_argument('--incognito')
# options.add_argument('--headless')
return webdriver.Chrome(service=service, options=options)
driver = initialize()
driver.implicitly_wait(10)
driver.get('https://solution.soloel.com/')
sleep(3)
#IDの入力
account_id = driver.find_element(By.ID, 'loginId')
account_id.send_keys(input('IDを入力:'))
sleep(3)
#IDの入力
account_pw = driver.find_element(By.ID, 'password')
account_pw.send_keys(input('パスワードを入力:'))
sleep(3)
#ログイン
login = driver.find_element(By.ID, 'doLogin')
login.click()
sleep(5)
#履歴のページに移動
driver.get('https://solution.soloel.com/buyer/view/a010/DAG01010.html_xxxxxx')
sleep(5)
from_date_input = driver.find_element(By.ID, "serchFromDate")
from_date_input.clear()
from_date_input.send_keys('2020/01/01')
sleep(3)
to_date_input = driver.find_element(By.ID, "serchToDate")
to_date_input.clear()
# 当月の月末を入力するため、まずシステム年月日を取得
today = datetime.date.today()
# システム年月の最終日を取得
lastDay = calendar.monthrange(today.year, today.month)[1]
# str型 にする
lastDate = str(datetime.date(today.year, today.month, lastDay))
#文字列を置き換え
lastDate= lastDate.replace('-','/')
to_date_input.send_keys(lastDate)
sleep(3)
goDoSearch = driver.find_element(By.ID, 'goDoSearch')
goDoSearch.click()
#Pythonファイルのあるディレクトリパス取得
dir_path = os.path.dirname(os.path.abspath(__file__))
html = driver.page_source
#dir_pathの中に,ファイル名{driver.title}.htmlで保存
p = os.path.join(dir_path, 'html', f'{driver.title}.html')
with open(p, 'w') as f:
f.write(html)
next_page = driver.find_element(By.ID, "goPagerNext")
#htmlの名前にページ番号を振る準備
number = 1
#次ページに移動するボタンを取得。文字列が0の場合はブラウザを閉じる。
next_page = driver.find_element(By.ID, "goPagerNext")
s = len(str(next_page))
s = int(s)
if s == 0:
driver.quit()
else:
#ボタンがあればクリック。なければbreak
while True:
try:
next_page = driver.find_element(By.ID, "goPagerNext")
next_page.click()
sleep(5)
html = driver.page_source
number += 1
p = os.path.join(dir_path, 'html', f'{driver.title+(str(number))}.html')
with open(p, 'w') as f:
f.write(html)
except NoSuchElementException:
driver.quit()
break
以下を追記修正しました。(2024年1月18日更新)
crwaling.py
#当月の月末を入力するため以下をインポート
import calendar
import datetime
# まずシステム年月日を取得
today = datetime.date.today()
# システム年月の最終日を取得
lastDay = calendar.monthrange(today.year, today.month)[1]
# str型 にする
lastDate = str(datetime.date(today.year, today.month, lastDay))
#文字列を置き換え
lastDate= lastDate.replace('-','/')
to_date_input.send_keys(lastDate)
sleep(3)
保存したhtmlから情報をCSVに書き込むコードは、以下の記事をご覧ください。