1384262447 SBI証券のバックアップサイトに自動でログインし売買を行うプログラムを作成しています。


ログイン、および単元未満株(S株)の売買には成功したのですが指定単位での株の購入がうまくできません。

使用言語はJavaでDefaultHttpClientを使ってウェブ上で行う手順をトレースして売買をさせようと考えています。

結果を出力して見ると、ログインから銘柄の指定、条件や購入数の指定までは進むことができており、最後の注文確定の部分から進めていないようです(画像参照)。

単元未満株の売買には成功しており、同じ仕組が利用できると思われますが、どうしても通らずお手上げになっています。

同じようなものを作られたことがあるかたがいらっしゃれば、何が問題でどこを修正すればいいのか知恵を頂きたく存じます。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/11/19 22:25:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:language_and_engineering No.1

回答回数170ベストアンサー獲得回数63

ポイント75pt

Webスクレイピングは,HTTPパラメータをベースにしたサイトとの通信やり取りで実装すると,うまくいかなくなる事が多いです。
理由は,そういう自動処理ができないようにサイト側も対策をするからです。

例えば,hiddenでパラメータを埋め込んで,それが送信されていないと不正なアクセスとみなし,このサービスはご利用できません,とだけそっけなく通知する。
あるいは,HTTPヘッダのユーザエージェントなどなどをよく検査して,ボットではなく本物のブラウザがアクセスしていることを検査する,など。

そこで解決策ですが,IEを自動操作するプログラムを組んで対処するのがベストです。
Webアプリの操作はつまるところDOM操作の繰り返しなので,ネットワークプログラミングではすぐに壁に行きあたり,DOMを操作するためにブラウザそのものを立ち上げて自動操作する路線に切り替えることになります。

そのための言語としては,VBA,WSH,UWSCなどがよく使われますね。IE 自動操作 などでググってみてください。

(これ以上の具体的な回答はできません。自動操作を禁じているサイトもたくさんあるので,その幇助にあたる回答はできないのです。)

他1件のコメントを見る
id:language_and_engineering

世の中のボット系のツールはこの手の路線で作られることが多いですので、早めの乗り換えと習得をお勧めします。ステータスコードを調べるなどの通信プログラミングの路線からは一刻も早く抜け出すことです。サイト側では、不正アクセスの原因を特定できないように作りますから。サイト側が親切に原因を教えてくれるとは期待しないほうがよいです。原因を特定しやすく作ってしまったら、そこを利用してくださいと言わんばかりの行為になりますので…。 で、そういった泥沼に陥らないためには、通信プログラミングではなく、本物のブラウザを動かすことがどうしても必要になるんですよね。そうすればサイトの操作で何か不具合が生じた場合もブラウザの画面上でグラフィカルに原因がわかるので、こういう問題が起きたときにも実装がサクサク進みやすいのです。時間を消耗して手詰まりになる前に再考なさることを強くお勧めしますよ、本当に。 プログラミング習得の手間を避けたいなら、badboyみたいなツール利用の手もありますし。。

2013/11/15 09:54:27
id:language_and_engineering

あと、言語を学ぶ手間もそんなに負担ではありません。「株 自動売買 自作」などでググればすぐにわかりますが、uwscやVBAでそういうロボットの作り方を紹介しているサイトがたくさんありますので。

2013/11/15 10:38:47

その他の回答3件)

id:language_and_engineering No.1

回答回数170ベストアンサー獲得回数63ここでベストアンサー

ポイント75pt

Webスクレイピングは,HTTPパラメータをベースにしたサイトとの通信やり取りで実装すると,うまくいかなくなる事が多いです。
理由は,そういう自動処理ができないようにサイト側も対策をするからです。

例えば,hiddenでパラメータを埋め込んで,それが送信されていないと不正なアクセスとみなし,このサービスはご利用できません,とだけそっけなく通知する。
あるいは,HTTPヘッダのユーザエージェントなどなどをよく検査して,ボットではなく本物のブラウザがアクセスしていることを検査する,など。

そこで解決策ですが,IEを自動操作するプログラムを組んで対処するのがベストです。
Webアプリの操作はつまるところDOM操作の繰り返しなので,ネットワークプログラミングではすぐに壁に行きあたり,DOMを操作するためにブラウザそのものを立ち上げて自動操作する路線に切り替えることになります。

そのための言語としては,VBA,WSH,UWSCなどがよく使われますね。IE 自動操作 などでググってみてください。

(これ以上の具体的な回答はできません。自動操作を禁じているサイトもたくさんあるので,その幇助にあたる回答はできないのです。)

他1件のコメントを見る
id:language_and_engineering

世の中のボット系のツールはこの手の路線で作られることが多いですので、早めの乗り換えと習得をお勧めします。ステータスコードを調べるなどの通信プログラミングの路線からは一刻も早く抜け出すことです。サイト側では、不正アクセスの原因を特定できないように作りますから。サイト側が親切に原因を教えてくれるとは期待しないほうがよいです。原因を特定しやすく作ってしまったら、そこを利用してくださいと言わんばかりの行為になりますので…。 で、そういった泥沼に陥らないためには、通信プログラミングではなく、本物のブラウザを動かすことがどうしても必要になるんですよね。そうすればサイトの操作で何か不具合が生じた場合もブラウザの画面上でグラフィカルに原因がわかるので、こういう問題が起きたときにも実装がサクサク進みやすいのです。時間を消耗して手詰まりになる前に再考なさることを強くお勧めしますよ、本当に。 プログラミング習得の手間を避けたいなら、badboyみたいなツール利用の手もありますし。。

2013/11/15 09:54:27
id:language_and_engineering

あと、言語を学ぶ手間もそんなに負担ではありません。「株 自動売買 自作」などでググればすぐにわかりますが、uwscやVBAでそういうロボットの作り方を紹介しているサイトがたくさんありますので。

2013/11/15 10:38:47
id:gizmo5 No.2

回答回数504ベストアンサー獲得回数141

ポイント75pt

一般的な話ですが referer をチェックしているサイトがあります。
サイトの実装によるので確実ではありませんが 400 Bad Request や 403 Forbidden を返すことが多いように思います。
HttpResponse#getStatusLine() 返ってきているステータスコードを確認してみてください。
もしかするとステータスコードの後の文字列にリクエストを拒否した理由が書いてある可能性もあります。

対処方法としては referer を設定することです。
HttpPost#addHeader() で適切な referer を設定してください。
実際のページ遷移と同じにするのが良いと思いますが、Host までしかチェックしていないサービスも経験したことがあります。

id:b2dollar

Firefox等で通常通り操作した時のHttpヘッダーのログを取りreferer他を設定してみましたがやはり駄目でした。
エラーページのステータスコードは200で原因を特定できるような情報は得られませんでした。

同じくFirefoxでユーザーエージェントをでたらめな文字列にして操作してみたところ
普通に操作は通るのでユーザーエージェントは見ていないようでした。

2013/11/15 08:28:56
id:nikodesu No.3

回答回数1025ベストアンサー獲得回数39

ポイント75pt

こういったものは使えないですか?
http://techbooster.jpn.org/andriod/application/1801/

id:emulated No.4

回答回数160ベストアンサー獲得回数6

ポイント75pt

http://blog.inouetakuya.info/entry/20090402/1238680440
こちらが参考になると思います。

id:b2dollar

自己解決しました。

結論から言うと各画面遷移の間に適当な待機時間を設けてやることで処理が通るようになりました。

画面遷移があまりに早いとエラーを出すような仕組みになっているようです。

ベストアンサーは直接的な解決策ではありませんがuwscが色々と面白い用途がありそうな

ソフトであったので選ばせて頂きました。

  • id:fiwa
    ここのコメント欄のやりとりを読んでUserAgentかとも思いましたが、それだとS株が大丈夫な理由がよく分かりませんね。
    http://plaza.rakuten.co.jp/acknight/diary/200902270001/

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません