表題にあるアクションを実行してみたく調べてみました。
参考になりそうな以下のページを見つけましたが、どのようにコードを編集したらよいのかわかりませんでした。(urlやログインIDを変えることくらいで、他は全然手を付けられませんでした。)
Google SpreadSheet のGAS(JavaScript)でスクレイピング(Webデータゲット)
https://qiita.com/standard-software/items/16214dc4e64d28952c2d
Google Apps Scriptでクレジットカード利用明細を毎月自動で奥さんにメール送信する
https://qiita.com/takeruko/items/5fed0f7acc1a60d1df76
これについて解説してくださる神回答まで求めるのは図々しいかと思いますので(もちろん嬉しいですが)、勉強するためのサイトや書籍だけでも教えていただければ幸いです。
SBI証券のログインページです。
https://www.sbisec.co.jp/ETGate/?_ControlID=WPLETacR001Control&_PageID=DefaultPID&_DataStoreID=DSWPLETacR001Control&_ActionID=DefaultAID&getFlg=on
以下は私のバックグラウンドです。
VBAとpythonは触ったことがあります。ptythonは勉強中です。
javascript、GASは未経験です。
HTMLの構造については初心者向けの解説本をみた程度です。
HTTPについてはネットで調べた程度です。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/18 07:15
回答3件
0
ログインについてはこちらに方法がありました。
https://nehori.com/nikki/2017/04/30/post-4370/
プログラムの話からは外れますが、自己責任でお願い申し上げます。
投稿2019/03/18 10:13
総合スコア752
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/19 01:50
2019/03/19 01:56
2019/03/19 02:11
2019/03/19 02:20
2019/03/19 02:25
0
ベストアンサー
Google Apps Scriptでクレジットカード利用明細を毎月自動で奥さんにメール送信する
https://qiita.com/takeruko/items/5fed0f7acc1a60d1df76
これについて解説してくださる
Qiitaが解説だと思うのですが、どこが分からないのですか?
勉強するためのサイト
まずログイン処理の部分。
SBI用に書き直してみたのですが、実行がうまくいっているのかの確認方法がわかりません。
ログインのところだけやっても分かりません。
PDFにするという処理のところで、PDFにしてみて、ログイン後の画面が取れるかどうか、がログインできたことの検証になります(必ずしもPDFにする必要はないですが、responseを解析するよりも、PDFにするコードがあるなら、実際問題PDFで見るのが手っ取り早い方法だと思います)
また価格を取得する部分。
例ではpdfを取得しているようですが、これを価格を取得することに応用する方法が分かりません。
SBIのサイト先ではテーブルのようになっているなかの一部分なのです。サイトの要素?をお示しすべきかもしれませんが、個人情報を載せないように晒すことに自信がありません。
前提としてPDFで(全体を取得して)欲しい部分が取れていることを確認してください。というのは、ブラウザで見ることを前提にページが作られている場合URLFETCHAPPではどうしても取れないデータが発生します。理由はajaxというような技法(技法ってほどでもないですが)で、漸次取得しているデータは、取り切れないからです。
1つ目のリンクにある
var searchTag = '/contributions"><span class="userActivityChart_statCount">'; var index = html.indexOf(searchTag) if (index !== -1) { var html = html.substring(index + searchTag.length); var index = html.indexOf('</span>');
のところの、searchTag
の右辺や、 html.indexOf('</span>')
の</span>
を、欲しい情報の前後にあって曖昧性のないものにすれば、必要な部分だけ切り出すことができると思います。
投稿2019/03/18 07:49
編集2019/03/19 02:08総合スコア12705
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/19 01:59
2019/03/19 02:03
2019/03/19 02:34
0
-- coding: utf-8 --
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
import schedule
import time
from datetime import datetime as dt
import gspread
import json
def sisankaki():
options = Options() # ヘッドレスモード(chromeを表示させないモード) options.add_argument('--headless') driver = webdriver.Chrome(executable_path='XXXX', options=options) driver.get('https://www.sbisec.co.jp/ETGate') #スクリーンショットをとって確認することも可 #driver.save_screenshot('sbi.png') # ユーザーネームとパスワードを設定 username = "XXX" password = "XXX" # ユーザーネームテキストボックスを選択 user_id = driver.find_element_by_id("user_input") # ユーザーネームを入力 user_id.find_element_by_name("user_id").send_keys(username) # パスワードテキストボックスを選択 user_pass = driver.find_element_by_id("password_input") # パスワードを入力 user_pass.find_element_by_name("user_password").send_keys(password) # ログインを押下 driver.find_element_by_class_name("ov").click() # 口座管理に遷移 driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[2]/div/ul/li[3]/a/img").click() #print(driver.current_url) # 文字コードをUTF-8に変換 html = driver.page_source.encode('utf-8') # BeautifulSoupでパース soup = BeautifulSoup(html, "html.parser") table = soup.find_all("table", border="0", cellspacing="0", cellpadding="0", width="340") #pd.read_html()はListに格納されて戻されることに注意 df_table = pd.read_html(str(table))[9] print(df_table) print(type(df_table)) ## 必要な行・列のみ抽出(信用ポジがある場合iloc[9,1]にする) sousisan = df_table.iloc[8, 1] print(sousisan) # ブラウザーを閉じる driver.quit()
#####ここからスプレッドシート操作##### #ServiceAccountCredentials:Googleの各サービスへアクセスできるservice変数を生成します。 from oauth2client.service_account import ServiceAccountCredentials #2つのAPIを記述しないとリフレッシュトークンを3600秒毎に発行し続けなければならない scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] #認証情報設定 #ダウンロードしたjsonファイル名をクレデンシャル変数に設定(秘密鍵、Pythonファイルから読み込みしやすい位置に置く) credentials = ServiceAccountCredentials.from_json_keyfile_name('XXX', scope) #OAuth2の資格情報を使用してGoogle APIにログインします。 gc = gspread.authorize(credentials) #共有設定したスプレッドシートキーを変数[SPREADSHEET_KEY]に格納する。 SPREADSHEET_KEY = 'XXX' #共有設定したスプレッドシートのシート1を開く worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1 #A4セルの値に表示させる worksheet.update_cell(3,1, sousisan) ima = dt.now() imastr = ima.strftime('%H:%M:%S') print(imastr) print("I'm writing...")
sisankaki()
定期実行するジョブをライブラリに登録(実行時間も管理する)
#schedule.every(15).minutes.do(sisankaki)
登録したジョブを実行させるための処理?
#while True:
schedule.run_pending()
time.sleep(1)
#もし15:15こえたらブレイク
if (15 - dt.now().hour <=0) and (15 - dt.now().minute <= 0) :
print('終了します。')
break
投稿2019/12/11 23:55
総合スコア25
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。