【Python】SeleniumでログインしCSVダウンロード&そのCSVをPandasで加工してBigQueryに転送

【1】概要

◆背景

・毎日決まったところからCSVを落とし、BigQueryに転送する処理をしたい。

◆やりたいこと

Seleniumを使用し、あるサイトにログインしてCSVをダウンロードする。
・ダウンロードしたファイルをPandasで加工し、BigQueryに転送。

【2】内容

◆コード全文

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd
from datetime import datetime as dt, timedelta
import datetime
from webdriver_manager.chrome import ChromeDriverManager
import os
from google.cloud import bigquery

os.getcwd()

#フォルダ指定
default_folder_name = "{ファルダパス}"
os.chdir(default_folder_name)

#日付指定
tdatetime = dt.now()
date_nonhyphen = tdatetime.strftime('%Y%m%d')
date_hyphen = tdatetime.strftime('%Y-%m-%d')
time_str = tdatetime.strftime('%Y-%m-%d %H:%M:%S')

#Seleniumを使うための設定とログインしたい画面への遷移
URL = "{ログインしたいサイトのURL}"
driver_path = "./chromedriver"
driver = webdriver.Chrome(ChromeDriverManager().install())
#driver = webdriver.Chrome()
driver.maximize_window()
time.sleep(2.5)
driver.get(URL)
time.sleep(2.5)

# emailをクリックする(ここの指定はサイトによって変わる)
email_btn = driver.find_element(By.NAME,'email')
email_btn.click()
# 1秒待機
time.sleep(1)
# emailを入力
email_btn.send_keys("{ログインに必要なemail}")
# 1秒待機
time.sleep(1)

# パスワードをクリック(ここの指定はサイトによって変わる)
password_btn = driver.find_element(By.NAME,'password')
password_btn.click()

# パスワードを入力
password_btn.send_keys("{ログインに必要なPassword}")

# 1秒待機
time.sleep(1)

# サブミットをクリックしログイン、これでログインできる
login_btn = driver.find_element(By.NAME,'submit')
login_btn.click()

#ファイルをdownload
posts_download_url = "{ダウンロードURL}"
driver.get(posts_download_url)

#30秒待機
time.sleep(30)

# ブラウザを終了する。
driver.close()

#ファイル名指定
file_name = "{ダウンロードされるファイルのCSV名}"

#ダウンロードフォルダ指定
key="HOME"
folder = os.getenv(key)
print(folder)
folder_name = folder+"/Downloads"

os.getcwd()
os.chdir(folder_name)

#CSVをダウンロード
df = pd.read_csv(file_name)

#日時列を追加
df["uploaded_at"] = time_str

#最初のフォルダに戻る
os.chdir(default_folder_name)

#GCPの設定
GCP_PROJECT_NAME = "{GCPのプロジェクト名}"

os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '{GCPの認証ファイルの場所}'

# bigQueryクライアント認証
client = bigquery.Client(project=GCP_PROJECT_NAME)

#BQにアップロード
df.to_gbq("{テーブル名}"+date_nonhyphen,if_exists="replace")

【3】補足

◆コード補足

●chromedriverの更新が必要

通常だと更新が必要だが、ChromeDriverManagerのモジュールを使用することで更新不要になる。

driver = webdriver.Chrome() #更新必要
driver = webdriver.Chrome(ChromeDriverManager().install()) #更新不要