ログイン、および単元未満株(S株)の売買には成功したのですが指定単位での株の購入がうまくできません。
使用言語はJavaでDefaultHttpClientを使ってウェブ上で行う手順をトレースして売買をさせようと考えています。
結果を出力して見ると、ログインから銘柄の指定、条件や購入数の指定までは進むことができており、最後の注文確定の部分から進めていないようです(画像参照)。
単元未満株の売買には成功しており、同じ仕組が利用できると思われますが、どうしても通らずお手上げになっています。
同じようなものを作られたことがあるかたがいらっしゃれば、何が問題でどこを修正すればいいのか知恵を頂きたく存じます。
Webスクレイピングは,HTTPパラメータをベースにしたサイトとの通信やり取りで実装すると,うまくいかなくなる事が多いです。
理由は,そういう自動処理ができないようにサイト側も対策をするからです。
例えば,hiddenでパラメータを埋め込んで,それが送信されていないと不正なアクセスとみなし,このサービスはご利用できません,とだけそっけなく通知する。
あるいは,HTTPヘッダのユーザエージェントなどなどをよく検査して,ボットではなく本物のブラウザがアクセスしていることを検査する,など。
そこで解決策ですが,IEを自動操作するプログラムを組んで対処するのがベストです。
Webアプリの操作はつまるところDOM操作の繰り返しなので,ネットワークプログラミングではすぐに壁に行きあたり,DOMを操作するためにブラウザそのものを立ち上げて自動操作する路線に切り替えることになります。
そのための言語としては,VBA,WSH,UWSCなどがよく使われますね。IE 自動操作 などでググってみてください。
(これ以上の具体的な回答はできません。自動操作を禁じているサイトもたくさんあるので,その幇助にあたる回答はできないのです。)
Webスクレイピングは,HTTPパラメータをベースにしたサイトとの通信やり取りで実装すると,うまくいかなくなる事が多いです。
理由は,そういう自動処理ができないようにサイト側も対策をするからです。
例えば,hiddenでパラメータを埋め込んで,それが送信されていないと不正なアクセスとみなし,このサービスはご利用できません,とだけそっけなく通知する。
あるいは,HTTPヘッダのユーザエージェントなどなどをよく検査して,ボットではなく本物のブラウザがアクセスしていることを検査する,など。
そこで解決策ですが,IEを自動操作するプログラムを組んで対処するのがベストです。
Webアプリの操作はつまるところDOM操作の繰り返しなので,ネットワークプログラミングではすぐに壁に行きあたり,DOMを操作するためにブラウザそのものを立ち上げて自動操作する路線に切り替えることになります。
そのための言語としては,VBA,WSH,UWSCなどがよく使われますね。IE 自動操作 などでググってみてください。
(これ以上の具体的な回答はできません。自動操作を禁じているサイトもたくさんあるので,その幇助にあたる回答はできないのです。)
世の中のボット系のツールはこの手の路線で作られることが多いですので、早めの乗り換えと習得をお勧めします。ステータスコードを調べるなどの通信プログラミングの路線からは一刻も早く抜け出すことです。サイト側では、不正アクセスの原因を特定できないように作りますから。サイト側が親切に原因を教えてくれるとは期待しないほうがよいです。原因を特定しやすく作ってしまったら、そこを利用してくださいと言わんばかりの行為になりますので…。 で、そういった泥沼に陥らないためには、通信プログラミングではなく、本物のブラウザを動かすことがどうしても必要になるんですよね。そうすればサイトの操作で何か不具合が生じた場合もブラウザの画面上でグラフィカルに原因がわかるので、こういう問題が起きたときにも実装がサクサク進みやすいのです。時間を消耗して手詰まりになる前に再考なさることを強くお勧めしますよ、本当に。 プログラミング習得の手間を避けたいなら、badboyみたいなツール利用の手もありますし。。
あと、言語を学ぶ手間もそんなに負担ではありません。「株 自動売買 自作」などでググればすぐにわかりますが、uwscやVBAでそういうロボットの作り方を紹介しているサイトがたくさんありますので。
一般的な話ですが referer をチェックしているサイトがあります。
サイトの実装によるので確実ではありませんが 400 Bad Request や 403 Forbidden を返すことが多いように思います。
HttpResponse#getStatusLine() 返ってきているステータスコードを確認してみてください。
もしかするとステータスコードの後の文字列にリクエストを拒否した理由が書いてある可能性もあります。
対処方法としては referer を設定することです。
HttpPost#addHeader() で適切な referer を設定してください。
実際のページ遷移と同じにするのが良いと思いますが、Host までしかチェックしていないサービスも経験したことがあります。
Firefox等で通常通り操作した時のHttpヘッダーのログを取りreferer他を設定してみましたがやはり駄目でした。
エラーページのステータスコードは200で原因を特定できるような情報は得られませんでした。
同じくFirefoxでユーザーエージェントをでたらめな文字列にして操作してみたところ
普通に操作は通るのでユーザーエージェントは見ていないようでした。
世の中のボット系のツールはこの手の路線で作られることが多いですので、早めの乗り換えと習得をお勧めします。ステータスコードを調べるなどの通信プログラミングの路線からは一刻も早く抜け出すことです。サイト側では、不正アクセスの原因を特定できないように作りますから。サイト側が親切に原因を教えてくれるとは期待しないほうがよいです。原因を特定しやすく作ってしまったら、そこを利用してくださいと言わんばかりの行為になりますので…。 で、そういった泥沼に陥らないためには、通信プログラミングではなく、本物のブラウザを動かすことがどうしても必要になるんですよね。そうすればサイトの操作で何か不具合が生じた場合もブラウザの画面上でグラフィカルに原因がわかるので、こういう問題が起きたときにも実装がサクサク進みやすいのです。時間を消耗して手詰まりになる前に再考なさることを強くお勧めしますよ、本当に。 プログラミング習得の手間を避けたいなら、badboyみたいなツール利用の手もありますし。。
2013/11/15 09:54:27あと、言語を学ぶ手間もそんなに負担ではありません。「株 自動売買 自作」などでググればすぐにわかりますが、uwscやVBAでそういうロボットの作り方を紹介しているサイトがたくさんありますので。
2013/11/15 10:38:47