Pythonの勉強中です。
PythonからSeleniumを使ってGoogle Chromeを自動操作して
指定サイトにcsvファイルをアップロードするものす。
詳細はブログに書きました。
https://tbshiki.com/pythonstudy004/
##構成
pythonstudy/
├ sample.py
├ chromedriver.exe
├ csvlist.txt
├ finmassege.txt
└ csv/
└[アップロードしたい.csv]
##プログラム
sample.py
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
import time
import os
import wx
import sys
#サイトログインページ情報とログイン情報をまとめる
TOP_URL = "example.com"
UPLOAD_URL = "http://hogehoge.example/"
ID = "id"
PASSWORD = "password"
#ディレクトリを取得
dir_name = (os.path.dirname(file))
dir_name = dir_name.replace('\', '/') #Windows用?に\を/に置換
#完了メッセージ表示用のwxPython
wx_app = wx.App()
#ブラウザ読み込み
driver = webdriver.Chrome("./chromedriver.exe") #chromedriver.exe読み込み
driver.set_page_load_timeout(600) #ページロード最大600秒
driver.get(TOP_URL) #chrome起動→ログインページに移動
time.sleep(1)
#ログイン
id = driver.find_element_by_name("loginid")
id.send_keys(ID)
password = driver.find_element_by_name("password")
password.send_keys(PASSWORD)
time.sleep(1)
#ログインボタンをクリック
login_button = driver.find_element_by_name("login")
login_button.click()
time.sleep(1)
#csv一覧のテキストファイルを読み込みで開いてリストに
csv_list_file = open('./csvlist.txt', 'r') #csvファイルの一覧テキストファイルを読み込み
csv_list = csv_list_file.readlines()
csv_list_file.close()
#csv一覧からできたリスト分繰り返し
for i in range(len(csv_list)):
#csvを読み込ませるページに移動
driver.get(UPLOAD_URL)
time.sleep(1)
#ファイルの絶対パスを変数に ファイルは/csv/にある
file_choice_str = dir_name + '/csv/' + csv_list[i].rstrip()
#ファイル読み込み
file_choice = driver.find_element_by_name("fileupload")
file_choice.send_keys(file_choice_str)
time.sleep(1)
#アップロードボタンをクリック
now_upload = driver.find_element_by_class_name("uploadbotton")
now_upload.click()
time.sleep(1)
#読み込み停止時再実行の為の変数設定
loop_count = 0
#読み込み停止時再実行用繰り返し
while True:
#再実行しすぎを防止
loop_count += 1
if loop_count >= 3:
#エラーメッセージボックスを表示
wx.MessageBox('3回失敗', 'Python')
#エラーが続いたのでプログラムを終了
sys.exit()
try:
#ダイアログの表示取得
alert_text = Alert(driver).text
#取得した文字列を表示
print(alert_text)
#ダイアログのOKを選択
Alert(driver).accept()
time.sleep(1)
#whileを抜ける
break
except:
print("読み込み停止")
#ブラウザに表示されたメッセージを取得
fin_massege = driver.find_element_by_class_name("massege")
fin_massege_str = fin_massege.text #文字列として変数に代入
#複数行の場合改行を半角スペースに置換して1行に、行末に改行
fin_massege2 = csv_list[i].rstrip() + fin_massege_str.replace("\n"," ") + "\n"
print(fin_massege2)
#完了ログ用テキストを開いて追記
fin_massege_txt = open('./finmassege.txt', 'a')
fin_massege_txt.write(fin_massege2)
fin_massege_txt.close()
#読み込みが完了したcsvをテキストから削除して上書き(実際には作り直し)
csv_list_file = open('./csvlist.txt', 'r') #読み込み専用で開く
csv_list2 = csv_list_file.readlines() #行ごとにリスト化
del csv_list2[0] #1行目にあたるリスト0番目を削除
csv_list_file = open('./csvlist.txt', 'w') #書き込み専用で開く(この時にテキストファイルは空白になる)
csv_list_file.writelines(csv_list2) #0番目を削除したリストをテキストファイルに
csv_list_file.close() #テキストファイルを終了
#繰り返しの為の初期化
alert_text = ""
#ブラウザを閉じる
driver.close()
#完了メッセージボックスを表示
wx.MessageBox('完了', 'Python')
[詳細はブログに書きました。](https://tbshiki.com/pythonstudy004/)
[https://tbshiki.com/pythonstudy004/](https://tbshiki.com/pythonstudy004/)