ダイアログかエクセルで注文時刻・銘柄コード・株数・注文期間を入力し、証券会社のHPを自動操作して指定時刻に高速に注文できるツールを作りたいと思います。
操作するホームページはテキスト・ボタン・画像・フォーム・プルダウンメニューなどの要素があります。
APIは用意されていません。
amazon・楽天などECサイトで、受付開始と同時に自動購入するbotを作るイメージです。
自動化の流れは、以下の順です。
ログイン→株式売買注文画面→銘柄コードを入力→注文画面に遷移→株数・注文期間を入力→注文確認・注文→注文照会→ログアウト
注文受付時間外の場合は途中で注文時間外です。と言ったメッセージが出てのエラーになるので、前の画面まで戻ってエラーが出ない時間になるまで繰り返して注文まで行いたいです。
できるだけミリ秒単位で高速化したいので、非ブラウザで行うのが望ましいです。できない場合はC++・C#・JavaScript・Pythonなどの言語を使ってブラウザを操作してでもよいです。(VBAはミリ秒単位の操作に向いていないとわかっています。)
プログラミングスキルは初心者ですが、CとJavaに関して学校で基本を習った程度の知識はあります。
HTMLの構造は多少読めて、いままではUWSCのRecIEを使いタグを要素を確かめながら行ってきましたが、動作が遅いです。
こういうwebの自動操作系の関連の書籍などがなかなか見つからず、参考サイトも少ないので何から勉強していいか困っています。どの書籍や参考サイトが参考になるのか、非ブラウザやブラウザを操作するにはどの言語を使い行えばいいか教えてください。
■補足として自身でやってみた事を追加します。
・C#でwebbrowserを使い作成
http://raku-bura.seesaa.net/category/25392622-1.htmlを参考に作成し、フォーム入力など一部動作が行えるものもあるが
<A class="cmd-action cmn-btn" onclick="return checkInput(document.main_fm)"
href="JavaScript: document.main_fm.submit()">ログイン</A>
の部分でエラーで自動操作できなくなり断念
・JavaScriptを使い作成
HPを作成するための記事ばかりで関連の資料が少なく断念
・C++を使い作成
資料が少ない上難しすぎて断念
・Seleniumを使い作成
動作が記録できて作りやすいが、UWSCやVBAと変わらず動作が遅いので断念。
また、入力ダイアログの作り方やエラー処理の仕方の資料がない。
・pythonを使い作成
https://qiita.com/yosgspec/items/0892b2bf421f621d21c0を見る限り動作が遅いと思われる。
似たようなことを行っている参考事例について、以下のサイトがあります。
http://raku-bura.seesaa.net/
http://buy1click.blog.fc2.com/blog-entry-91.html
具体的に自動操作を行いたい証券会社webページのタグの一例を自動化の流れ
HTML
1 2・支店番号、口座番号、パスワードを入力しログインをクリックする。 3<TR> 4<TD class="cmn-table-data">支店番号</TD> 5<TD class="cmn-table-data"><INPUT name="shop" class="cmn-table-input" onfocus="this.select()" type="text" maxlength="3" pattern="[0-9]*" value=""> 6</TD></TR> 7<TR> 8<TD class="cmn-table-data">口座番号</TD> 9<TD 10class="cmn-table-data"><INPUT name="customer" class="cmn-table-input" onfocus="this.select()" type="text" maxlength="7" value=""> 11</TD></TR> 12<TR> 13<TD class="cmn-table-data">パスワード</TD> 14<TD class="cmn-table-data"><INPUT name="pass" class="cmn-table-input" onfocus="this.select()" type="password" maxlength="20" value=""> 15</TD></TR> 16 17<A class="cmd-action cmn-btn" onclick="return checkInput(document.main_fm)" 18href="JavaScript: document.main_fm.submit()">ログイン</A> 19<!-- Clear btn --> 20<A class="cmd-clear cmn-btn" href="JavaScript: document.main_fm.reset(); document.main_fm.shop.focus()"> 21クリア</A> 22 23 24・株式をクリックし株式売買注文をクリックする。 25<LI class="main-menu-item"><A class="main-menu-link" onclick="return true;" 26href="topmenu.do?menuNo=0&category=00&server_id=E67&menuNo=0&category=00" 27target="main_frm"><SPAN class="main-menu-word">トップ</SPAN> </A> </LI> 28<LI class="main-menu-item" style="position: static;"><A class="main-menu-link" 29href="javascript:void(0);"><SPAN class="main-menu-word">株式</SPAN> </A> 30 31<UL class="sub-menu" style="left: 533.83px; top: 214.73px; visibility: hidden;"> 32<LI class="sub-menu-item"><A class="sub-menu-link" onclick="return true;" href="topmenu.do?menuNo=0&category=ST&server_id=E67&menuNo=0&category=ST" 33target="main_frm"><SPAN class="sub-menu-word">株式売買注文</SPAN> </A></LI> 34<LI class="sub-menu-item"><A class="sub-menu-link" onclick="return true;" href="topmenu.do?menuNo=1&category=ST&server_id=E67&menuNo=1&category=ST" 35target="main_frm"><SPAN class="sub-menu-word">株式注文約定照会/取消/訂正</SPAN> </A></LI> 36</UL></LI> 37 38 39 40・売買区分買いボタンを押す 41<TD class="lbl-zenkaku td-2 p70"><INPUT name="opt_baibai" class="assist_baibai" 42id="uri" type="radio" value="1"> 43<LABEL for="uri"><SPAN class="bodyblue">売</SPAN></LABEL> 44 <INPUT name="opt_baibai" class="assist_baibai" id="kai" 45type="radio" checked="" value="3"> 46<LABEL for="kai"><SPAN class="bodyred">買</SPAN></LABEL> </TD> 47 48 49・注文数量入力 50<TD class="bgdark2 nobr td-1">注文数量</TD> 51<TD class="lbl-zenkaku td-2"> 52<UL> 53<LI><SPAN 54class="ui-spinner ui-widget ui-widget-content ui-corner-all"><INPUT name="txt_chu_suryo" class="ctl-size60 ui-spinner-input" id="assist_suryo" role="spinbutton" aria-valuemin="0" aria-valuemax="999999999" style="-ms-ime-mode: disabled;" onfocus="this.select()" type="text" maxlength="9" pattern="[0-9]*" value="" autocomplete="off"><A 55tabindex="-1" class="ui-spinner-button ui-spinner-up ui-corner-tr ui-button ui-widget ui-state-default ui-button-text-only" 56role="button" aria-disabled="false"><SPAN class="ui-button-text"><SPAN class="ui-icon ui-icon-plus">▲</SPAN></SPAN></A><A 57tabindex="-1" class="ui-spinner-button ui-spinner-down ui-corner-br ui-button ui-widget ui-state-default ui-button-text-only" 58role="button" aria-disabled="false"><SPAN class="ui-button-text"><SPAN class="ui-icon ui-icon-minus">▼</SPAN></SPAN></A></SPAN> 59<INPUT name="lbl_tani" id="lbl_tani" type="hidden" value="100"> 株</LI></UL></TD> 60 61 62 63・成行ボタンをクリック 64<INPUT name="sel_chu_jyoken" id="sel_chu_jyoken0" 65type="radio" value="1"> <LABEL 66for="sel_chu_jyoken0">成行 </LABEL> 67 68 69 70・期間指定ボタンを押し、期間指定をプルダウンメニュー指定 71・期間指定については事前に入力させ7とした場合、入力時が11/01(木)の場合入力時から7日後の11/08(木)と指定できるようにする。 72<TD class="bgdark2 nobr td-1 tr1 tr2">注文期限</TD> 73<TD class="bgdark2 nobr td-1 tr3 invisible">注文期限</TD> 74<TD class="lbl-zenkaku td-2"><INPUT name="lbl_shumatsu_ymd" id="lbl_shumatsu_ymd" type="hidden" value="20181102"> 75 <INPUT name="lbl_gyomu_ymd" id="lbl_gyomu_ymd" type="hidden" value="20181030"> 76 <INPUT name="lbl_shuchu_flg" id="lbl_shuchu_flg" type="hidden" value=""> 77 <SPAN class="st-nbr"><INPUT name="sel_chu_kigen" 78id="sel_chu_kigen1" type="radio" checked="" value="1"> <LABEL for="sel_chu_kigen1">当日限り </LABEL></SPAN><BR><SPAN 79class="st-nbr"><INPUT name="sel_chu_kigen" id="sel_chu_kigen2" type="radio" 80value="0"> <LABEL for="sel_chu_kigen2">期間指定 </LABEL></SPAN> 81 82 <SELECT name="sel_chu_kigen_ymd" class="ctl-size40" id="sel_chu_kigen_ymd"><OPTION 83value="00000000">(選択)</OPTION><OPTION value="20181031">10/31(水)</OPTION><OPTION 84value="20181101">11/01(木)</OPTION><OPTION 85value="20181102">11/02(金)</OPTION><OPTION 86value="20181105">11/05(月)</OPTION><OPTION 87value="20181106">11/06(火)</OPTION><OPTION 88value="20181107">11/07(水)</OPTION><OPTION 89value="20181108">11/08(木)</OPTION><OPTION 90value="20181109">11/09(金)</OPTION><OPTION 91value="20181112">11/12(月)</OPTION><OPTION 92value="20181113">11/13(火)</OPTION><OPTION 93value="20181114">11/14(水)</OPTION><OPTION 94value="20181115">11/15(木)</OPTION><OPTION 95value="20181116">11/16(金)</OPTION><OPTION 96value="20181119">11/19(月)</OPTION><OPTION 97value="20181120">11/20(火)</OPTION></SELECT> 98 <INPUT name="cmd_shuchu" id="cmd_shuchu" type="button" value="週末まで"> 99</TD> 100 101 102・インサイダー規制にチェックを入れる。 103<TD class="bgdark2 nobr td-1 p30">インサイダー規制</TD> 104<TD class="lbl-zenkaku td-2"><INPUT name="chk_insider_chk_kbn" id="chk_insider_chk_kbn" 105type="checkbox" value="1"> 106<LABEL 107for="chk_insider_chk_kbn">この取引がインサイダー取引(内部者取引)に該当しないことを確約し、発注します。<BR>ご同意いただける方はチェックしてください。</LABEL> 108</TD> 109 110 111・注文確認をクリック 112<LI><A class="cmd-action" id="cmd_order_btn" onclick="doSetAction('EventProcedure2_onclick');doEventProcedure2_onclick(getField('cmd_order_btn')); return false;" 113href="estg131ent.do?server_id=E67&accessCount=3&actionId=EventProcedure2_onclick&newwin=true">注文確認</A></LI> 114 115 116・パスワードを入力し発注するをクリック 117<DIV class="area-pass"> 118<UL> 119<LI>執行パスワード</LI> 120<LI><INPUT name="txt_exec_pwd" class="password ctl-size100" onfocus="this.select()" type="password" maxlength="20" value=""><BR> 121<DIV class="keyboard"><A id="cmd_epass_skbd" onclick="doSetAction('EventProcedure3_onclick');doEventProcedure3_onclick(getField('cmd_epass_skbd')); return false;" 122href="estg131ent.do?server_id=E67&accessCount=4&actionId=EventProcedure3_onclick&newwin=true">※ソフトキーボードを使う。</A></DIV></LI></UL></DIV><!--/Password--> 123<!--Button--> 124<DIV class="area-botan"> 125<UL> 126<LI><A class="cmd-action" id="cmd_save_shinki" onclick="doSetAction('EventProcedure9_onclick');doEventProcedure9_onclick(getField('cmd_save_shinki')); return false;" 127href="estg131ent.do?server_id=E67&accessCount=4&actionId=EventProcedure9_onclick&newwin=true">発注する</A></LI> 128<LI><A class="cmd-back2" id="cmd_return_confirm_shinki" onclick="doSetAction('EventProcedure13_onclick');doEventProcedure13_onclick(getField('cmd_return_confirm_shinki')); return false;" 129href="estg131ent.do?server_id=E67&accessCount=4&actionId=EventProcedure13_onclick&newwin=true">戻る</A></LI></UL></DIV> 130 131 132・注文約定照会画面へをクリック 133<LI><A class="cmd-action" id="cmd_esmp004" onclick="doSetAction('EventProcedure14_onclick');doEventProcedure14_onclick(getField('cmd_esmp004')); return false;" 134href="estg131ent.do?server_id=E67&accessCount=5&actionId=EventProcedure14_onclick&newwin=true">続けて注文する</A></LI> 135<LI><A class="cmd-action" id="cmd_chu_shokai_btn" onclick="doSetAction('EventProcedure15_onclick');doEventProcedure15_onclick(getField('cmd_chu_shokai_btn')); return false;" 136href="estg131ent.do?server_id=E67&accessCount=5&actionId=EventProcedure15_onclick&newwin=true">注文約定照会画面へ</A></LI>
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/29 11:26 編集
2018/10/29 11:28
2018/10/29 12:36 編集
2018/10/29 12:43
2018/10/29 13:13