none
自動トレードWebアプリケーソンのボタンを押すプログラム RRS feed

  • 質問

  • ここで質問すべきか分かりませんが。

    C# Express Editionを用いてあるNet証券のトレード自動化プログラムを書いています。

    WebRequest.Create(url)のurlに、ソースhtmlを解析して得たURLとパラメータを入力しています。その結果検索したトレード履歴などのhtmlの取得までは成功しています。

    問題は、自動注文です。
    注文画面には注文データ入力と注文を確定するボタンがあって、ボタンを押すと注文確定(確認を省略した場合)するのですが、この操作のプログラミング方法が分かりません。

    注文データの入力は、ソースhtmlから該当するnameとvalueを調べ、それをurlのパラメータに追加すれば良いはずですが、注文ボタンを押す操作が分かりません
    注文画面のソースhtmlの注文確定ボタン部分は下記となっています。
    <span id="confirmButtonBlock" class="button_area_section" style="display: block">
     <input type="image" name="" src="https://・・・・/images/orderpanel_3/confirm.gif" tabindex="14" id="confirmButton">
    </span>
    <span id="orderButtonBlock" class="button_area_section">
    <input type="image" name="" src="https://・・・・/images/orderpanel_3/order.gif" tabindex="15" id="orderButton">
    </span>
    素朴な疑問は、ボタンを表示するgifが指定されているだけで、操作に関する部分がないことです。
    ソースの他の部分にあるかと思い調べていますが見つかりません。

    何かヒントがありましたらご教授をお願いします。

    2009年5月2日 9:48

すべての返信

  • input type="image"は送信ボタンを兼ねています。

    (参考)
    画像で送信ボタンを作る
    http://www.tagindex.com/html_tag/form/input_image.html
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月2日 13:25
    モデレータ
  • input type="image"は送信ボタンを兼ねています。

    (参考)
    画像で送信ボタンを作る
    http://www.tagindex.com/html_tag/form/input_image.html
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/

    trapemiya 様

    そうなんですか。
    早速試してみます。
    とりあえずありがとうございました。
    2009年5月2日 13:39
  • 質問がよく理解できてないのでハズレかもしれませんが・・・

    > 注文画面には注文データ入力と注文を確定するボタンがあって、ボタンを押すと注文確定(確認を省略した
    > 場合)するのですが、この操作のプログラミング方法が分かりません。

    WebBrowser クラスを使うのはどうなんでしょうか? ボタンクリックなら以下のような感じで可能ですが

    HtmlDocument document = webBrowser1.Document;
    HtmlElement element = document.GetElementById("confirmButton");
    element.InvokeMember("click");

    2009年5月2日 14:55
  • WebBrowser クラスを使うのはどうなんでしょうか? ボタンクリックなら以下のような感じで可能ですが

    HtmlDocument document = webBrowser1.Document;
    HtmlElement element = document.GetElementById("confirmButton");
    element.InvokeMember("click");


    SurferOnWwwさん ご指摘ありがとうございます。

    WebBrowser については、知らなかったので調べてみたのですが、とてもすぐには分かりません。
    リモートのWebPageをクライアント側で処理するアプリを作れるということでしょうか。

    予想していたことですが、WebPageやhtml文書を処理する手法(クラスなど)は存在すると思っていましたが、現実は、htmlを取得、それから特定部分を切り出すメソッドを手作りしています。
    どこかでWebBrowser などの使用に移行しないといけませんがが、今作っているアプリについてはすぐには難しいと思っています。

    質問の意味は、サーバーにログインし、ある入力画面で、データ入力とその実行(ボタンクリック)をする方法ですが、element.InvokeMember("click");はこの目的にに合っているでしょうか。elementとして目的のボタンを設定すればクリック処理ができるということでしょうか。そうだとすれば簡単のようにも思えます。

    知識不足のため今後更に勉強していきたいと思っています。

    2009年5月4日 9:41
  • input type="image"は送信ボタンを兼ねています。

    (参考)
    画像で送信ボタンを作る
    http://www.tagindex.com/html_tag/form/input_image.html

    trapemiyaさん、検討してみましたが、まだ成功していません。

    >input type="image"は送信ボタンを兼ねています。
    この意味は分かりました。

    送信ボタンをクリックした場合に、actionによってアクセスするurl(プログラム)が指定してある場合がありますが、今回は質問のコードの範囲では見つかりません。

    入力画面のurlに、入力すべきデータを、name=value&でつないで上手くいっている場合がありますが、今回の質問の場合は上手くいきません、

    WebPageのソースを詳しく書くのは憚られるので、気がつかれたことがありましたらお願いします。
    2009年5月4日 9:58
  • > 質問の意味は、サーバーにログインし、ある入力画面で、データ入力とその実行(ボタンクリック)をする方法で
    > すが、element.InvokeMember("click");はこの目的にに合っているでしょうか。elementとして目的のボタンを設定
    > すればクリック処理ができるということでしょうか。

    目的に合っているかどうかまでは「目的」がよく分からないので何ともいえませんが、HtmlElement が取得できれば
    間違いなくクリックできます。

    2009年5月4日 10:39
  • ソースhtml上にはイベント設定されていなくても、JavaScriptで動的にHTMLを書き換えている場合があります。その点は大丈夫ですか?
    まぁくれぐれも誤発注しないよう気をつけてくださいね。
    2009年5月4日 10:42
  • ソースhtml上にはイベント設定されていなくても、JavaScriptで動的にHTMLを書き換えている場合があります。その点は大丈夫ですか?

    佐祐理さま

    有難うございます。

    もしよろしければ、JavaScriptで動的にHTMLを書き換えている場合の判定法を教えていただけませんか。探してみます。
    動的にHTMLを書き換えている場合は、どうすれば良いですか。
    しつこくてすみません。
    2009年5月4日 13:01
  • WebRequest.Create(url)のurlに、ソースhtmlを解析して得たURLとパラメータを入力しています。その結果検索したトレード履歴などのhtmlの取得までは成功しています。


    上述の”履歴検索”が出来たのであれば、考え方は同じではないでしょうか。

    履歴検索画面にパラメータを送信し、結果を得る。
    注文確定画面にパラメータを送信し、結果を得る。

    履歴検索をしたときと同様に注文確定用のパラメータをPOST送信(GET送信)すれば良いのではないでしょうか?

    ただし、Webサーバ側のインタフェース仕様が公開されていないのでなんとも言えません。

    2009年5月6日 12:28
  • 上述の”履歴検索”が出来たのであれば、考え方は同じではないでしょうか。

    履歴検索画面にパラメータを送信し、結果を得る。
    注文確定画面にパラメータを送信し、結果を得る。

    履歴検索をしたときと同様に注文確定用のパラメータをPOST送信(GET送信)すれば良いのではないでしょうか?

    ただし、Webサーバ側のインタフェース仕様が公開されていないのでなんとも言えません。


    ノブヒデ様

    やはりそうなんでしょうか。
    指摘していただいた方法では現在まだ成功しておりませんが、どこかに見落としがある可能性が高いので、再度検討してみます。

    ありがとうございました。
    2009年5月6日 22:49

  • 送信ボタンをクリックした場合に、actionによってアクセスするurl(プログラム)が指定してある場合がありますが、今回は質問のコードの範囲では見つかりません。

    入力画面のurlに、入力すべきデータを、name=value&でつないで上手くいっている場合がありますが、今回の質問の場合は上手くいきません、

    Fiddlerなどを利用して、Webサーバーとどのようなやり取りがされているかを見るとヒントが得られるかもしれません。
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年5月7日 0:27
    モデレータ
  • やはりそうなんでしょうか。
    指摘していただいた方法では現在まだ成功しておりませんが、どこかに見落としがある可能性が高いので、再度検討してみます。

    ありがとうございました。

    サーバサイドでは、クッキー認証することが多いので、以下urlなどが参考になれば・・。
    http://www.atmarkit.co.jp/fdotnet/dotnettips/326cookie/cookie.html

    あと思いつくのは、セッションIDくらいですかね。。
    MCITP(Database Developer/Database Administrator) MCTS(SQL Server 2005/Web Applications)
    2009年5月7日 11:05
  • MVP様

    Fiddlerなどを利用して、Webサーバーとどのようなやり取りがされているかを見るとヒントが得られるかもしれません。


    ノブヒデ様

    サーバサイドでは、クッキー認証することが多いので、以下urlなどが参考になれば・・。
    http://www.atmarkit.co.jp/fdotnet/dotnettips/326cookie/cookie.html

    あと思いつくのは、セッションIDくらいですかね。。

    残念ながら解決していませんが、一応これで区切りをつけたいと思います。
    皆さんのご指摘およびつまらないミスの存在など、冷静になってもう一度考えます。

    色々ありがとうございました。

    2009年5月8日 11:51