会社員KNIGHTの趣味三昧(卓球・盆太鼓・色々!)

会社員KNIGHTの趣味三昧(卓球・盆太鼓・色々!)

PR

Calendar

Category

カテゴリ未分類

(0)

卓球

(1195)

盆太鼓・盆踊り

(407)

トイドローン

(21)

その他

(334)

■■■■■■↓以下は凍結カテゴリー↓■■■■■■

(0)

KATS(自動売買プログラム)

(87)

「VB.NETで自動売買」入門

(24)

本日の取引

(1292)

デイトレ結果(勝ち)

(365)

デイトレ結果(負け)

(591)

夜間取引結果

(15)

今週の取引

(480)

今月の取引

(103)

明日の監視銘柄

(54)

株関連

(55)

草野球

(36)

Keyword Search

▼キーワード検索

Comments

accelwin@ Re[4]:【卓球】シェイクのラケット反転について(11/23) KNIGHTさんへ ご返信ありがとうございます…
KNIGHT@ Re[1]:【卓球】シェイクのラケット反転について(11/23) accelwinさんへ ブログへのコメント、どう…
accelwin@ Re:【卓球】シェイクのラケット反転について(11/23) 61歳でカットマンに挑戦し、2カ月目に突…
KNIGHT@ Re[1]:単身赴任を終え兵庫に戻ります(06/28) Tomohiro Takahashiさんへ コメント有難う…
Tomohiro Takahashi@ Re:単身赴任を終え兵庫に戻ります(06/28) お疲れ様でした。そのうち、私も頑張って…
KNIGHT@ Re[1]:第1回 日中杯 SpinOnline(WSS団体戦)(04/14) fukufuku1789さんへ いえいえ。むしろ私が…
fukufuku1789 @ Re:第1回 日中杯 SpinOnline(WSS団体戦)(04/14) 一緒に試合に出てくださりありがとうござ…
KNIGHT@ Re[1]:第15回 朝霧オープン卓球大会(チームマッチ)(01/21) fukufuku1789さんへ お疲れ様でした。今回…
fukufuku1789 @ Re:第15回 朝霧オープン卓球大会(チームマッチ)(01/21) 惜しい試合が多かったですね。 また卓球し…
KNIGHT@ Re[3]:2023年度台東区オープン年代別後期団体戦(12/10) マニャさんへ コメントどうも有難うござい…
Feb 25, 2009
XML
やっぱりWebスクレイピングは泥臭いですね。。。

SBI証券に入金手続きを行いましたので、見た目上は購買余力を与える事が出来ました。
発注すると「お買付余力が不足しております」と言われますが。

発注は明日以降にやるとして、購買余力の取得はまともに作れますので
早速Webスクレイピングを試みました。まあ一応取得出来ました。

その後、Webサイトから手動でログインパスワードや取引パスワードなどを設定し直しました。
その事を忘れていましたのでプログラムから与えたパスワードが間違っていました。

・・・でもテストすると、ログインして購買余力の取得をしたら取れません。
「あれ?」と思ったのですが、調べてみるとパスワードが間違っていてログイン
出来てなかった事に気付きました。ダサい(汗)。

WebサービスAPIだと戻り値のXMLからステータスを見たら成功か失敗か簡単に
判定出来たんですよね。それが、わざわざログインが成功したかどうか確認する為に
HTMLを解析しないといけないなんて。マジで「泥臭いなぁ」と落胆しました(´д`;

ログインだけじゃなく、 全てのリクエスト送信に対して「成功した時に、失敗した時と
比べて明らかにそれと分かる判断基準」を考える必要があります。

さすがに失敗したケースの全てを洗い出して判定するのは馬鹿らしいので、
成功したか失敗したかだけ判定するようにします。・・・あぁ面倒臭い(-_-;

ちなみにログイン判定については、応答HTMLソースの文字列中に「ログアウト」が
含まれていたらログイン成功だとみなすようにしました。無ければ失敗。


Webページを操作して発注していた皆さん、本当に大変な事をしてたんですね。


HttpWebRequestクラスで実装しています。動作は比較的軽快です。
WebBrowserクラスも試してみましたが、このクラスはShowしていないと動作しない
というバグがあるようです。
画面に見えないような座標にShowするという小細工もありますが、基本は
ブラウザ画面をFormに埋め込むようにして使う事になるでしょう。
しかもレスポンスに対して画面描画が完了したDocumentCompletedイベントをハンドルして
後続処理を行う必要があります。なのでやはり動作の遅さを感じます。
試しにログイン処理で処理速度を計測したところ、HttpWebRequestだと一瞬なのに
WebBrowserは少し遅いです。特に初めてのリクエストは1秒以上掛かる感じです。
仮にFormにWebBrowserを埋め込まずコード内でインスタンス化してShowしてみたら
実行時にIEが立ち上がりました。
IEのプロセスが立ち上がる時間があるので体感速度は死ぬほど遅くなりました。。。
パフォーマンスを気にするならHttpWebRequestを使うべきでしょうか。
※これは私の個人的な感想です





お気に入りの記事を「いいね!」で応援しよう

Last updated  Feb 26, 2009 12:17:51 AM
コメント(12) | コメントを書く


■コメント

お名前
タイトル
メッセージ
画像認証
上の画像で表示されている数字を入力して下さい。


利用規約 に同意してコメントを
※コメントに関するよくある質問は、 こちら をご確認ください。


WebBrowserクラス  
micorosoft さん
 私は、メインFormにTabControlクラスを置いて、その一つのページにWebBrowserクラスを埋め込んでます。表示していない状態のページにあっても動きます。最初のログインは2~3秒、二回目以降は1秒以内です。
(Feb 26, 2009 03:24:28 AM)

スピードアップ  
WATT さん
岡三の方はJavascriptが入っているのでよりもっさりですが、普段IEはほとんど使わないのでJavascriptをOFFでも良いかなと思っています。

僕はWebBrowserコントロールじゃなくIEを起動していますが、以前は注文する時にIEを起動していました。が、最近ログイン状態で待機することを覚えました(笑)かなりのスピードアップです。 (Feb 26, 2009 07:57:59 AM)

Re:WebBrowserクラス(02/25)  
ac_knight  さん
micorosoftさん
> 私は、メインFormにTabControlクラスを置いて、その一つのページにWebBrowserクラスを埋め込んでます。表示していない状態のページにあっても動きます。

Dim browser as New WebBrowser
などバッチ処理内で表示せずに使用するのは無理っぽく、ちゃんとForm上にコントロールを
貼り付けないと使えないという意味です。
TabControlで裏に置いたり、Form上の見えない座標位置に置くなどすれば視覚的に
問題ないですが。

> 最初のログインは2~3秒、二回目以降は1秒以内です。

私が試した時もそんなもんでした。
ログイン自体はザラバ開始前に行う処理なので気にしなくても良い気がしますが、
2回目以降の処理も速いとは言えHttpWebRequestに比べると少し遅いですかね。
単独で使用する分にはコンマ何秒の差なので気にするに値しないですが、マルチスレッドで
同時に複数リクエストを投げるようなタイミングがあった時などはそれもネックに
なってしまうのでは無いかと思います。
ログインしているWebBrowserのインスタンスが1つだった場合、同時にリクエストを送信する時って
SyncLockなどで同期を取ればパフォーマンスはかなり落ちてしまうんじゃないかと思ってます。
HttpWebRequestならクッキーのみ使い回してインスタンスは要求のたびに別物を作るので
他のリクエストにあまり影響を受けずパフォーマンスを維持出来るのでは無いかと。
micorosoftさんは日経先物だったと思うので単独銘柄だと思いますが、個別銘柄を
複数監視する時はWebBrowserを複数貼り付けるイメージになりますか?
どうするのがベストか自分の中で整理出来てなくてすみません。
(Feb 26, 2009 08:00:15 AM)

Re:スピードアップ(02/25)  
ac_knight  さん
WATTさん
>岡三の方はJavascriptが入っているのでよりもっさりですが、普段IEはほとんど使わないのでJavascriptをOFFでも良いかなと思っています。

JavaScriptをオフにしても動作するページだったらその方が良いですね。
オンにしていないと送信出来ないページは厳しいですね。
リクエストパラメータをJavaScriptで用意するものや、submit自体をJavaScriptで行うものも
少なくないと思うので。

>僕はWebBrowserコントロールじゃなくIEを起動していますが、以前は注文する時にIEを起動していました。が、最近ログイン状態で待機することを覚えました(笑)かなりのスピードアップです。

IEの起動はかなりの負荷だと思います。起動したまま保持しておくのはかなり有効ですよね。
ところでmicorosoftさんへのコメントでも書きましたが、そのIEに対し複数のリクエストを
同時に要求したい場面が出て来ませんか?同期を取って後続処理を待たせる事になりますか?
そうなってしまうと、発注タイミングによりかなり遅延するものも出てしまうのでは無いかと
懸念してまして、皆さんはどう解決してらっしゃるのかなぁと。ご教示頂けたら幸いです。
(Feb 26, 2009 08:09:11 AM)

Re:WebBrowserクラス  
ブライアン さん
以前クリックの携帯サイトを少しだけやったことがあるのですが、そのときはWebBrowserを使いました。micorosoftさんと同じようにTabControlの一つのタブにWebBrowserコントロールを貼り付けて作っていました。
私の場合は寄り引けタイミングの発注なので秒単位の高速性は必須ではなく、まあ満足していましたけど、今後場中で発注するというような場合はWebRequestで高速性を手に入れるのは有効そうですね。 (Feb 26, 2009 10:45:09 AM)

Re[1]:WebBrowserクラス(02/25)  
ac_knight  さん
ブライアンさん
スイングなどザラバ外での発注や単独銘柄などの場合には杞憂だと思います。
場中で且つデイトレシステムの時は考慮する必要があると考えています。
例えば発注が2リクエストで行って1秒掛かるとします。
ほぼ同時に10リクエストぐらいが発生する事って十分あり得ると思いますが、その時に
リクエスト送信がシリアライズしないと動作しないのであれば、最長で10秒待たされる
リクエストがあるという事になりますからね。。。
(Feb 26, 2009 12:19:16 PM)

Re[1]:スピードアップ(02/25)  
WATT さん
ac_knightさん
複数同時に発注の場面でも、やっぱり一個ずつの注文して順番待ちですね。僕はExcelVBAを使っているのでマルチスレッドは使えませんが、複数のブラウザで同時に発注出来るならスピードアップになりますね。VBに移行したら試してみたいです。 (Feb 26, 2009 05:21:07 PM)

マルチスレッド  
KNIGHT@携帯 さん
今日は卓球の練習日で帰宅が遅くなるので携帯から(苦笑
WATTさん、
マルチスレッドは複雑ではありますが、ボトルネックを軽減しパフォーマンス向上が期待出来るので.NETに移行された時には是非(^-^)
WebBrowserコントロールを使って上手くマルチスレッド処理が出来るかどうかは私は分かってません。
使ってらっしゃる他の方からのレスを期待します(^-^;
(Feb 26, 2009 07:06:57 PM)

マルチスレッド発注  
micorosoft さん
 マルチスレッド発注が可能かどうかは、クライアント側の都合だけでなく、サーバー側で一顧客単位に複雑セッション処理を許してくれるかどうかという条件もあります。
 サーバー側処理を考えるとき、余力引き当てなどでマルチリクエストあると排他処理が面倒だと思います。
(Feb 26, 2009 11:43:37 PM)

全て直列じゃないとは思ってます  
ac_knight  さん
micorosoftさん
> マルチスレッド発注が可能かどうかは、クライアント側の都合だけでなく、サーバー側で一顧客単位に複雑セッション処理を許してくれるかどうかという条件もあります。
> サーバー側処理を考えるとき、余力引き当てなどでマルチリクエストあると排他処理が面倒だと思います。

確かにサーバーサイドのロジックがどうやって実行されるかは分からないですね。
もしかすると同一アカウントからの発注処理などは並列処理しないように
しているかも知れません。どうでしょうね。
でも少なくとも参照系の処理は並列で動いているのでは無いでしょうか?
同一アカウントで複数のブラウザあるいは携帯、もしくは携帯アプリからログインして
それらの参照処理が全て直列で処理されているとは思えないので。
それを考えると、マルチスレッドでリクエスト送信するように作り込む事は
無駄ではないと思います。
(Feb 27, 2009 12:02:12 AM)

複数ログイン  
micorosoft さん
 カブドットコム証券では問題なかったのですが、オリックス証券では複数ログインすると先行ログインしているセッションは、ログアウトされてしまいます。ちょっと不便です。PC自動売買している時に、携帯からログインすると、自動売買を邪魔することになってしまいます。
 負荷分散装置を使って、複数のサーバーで処理させるなら、ログイン時にガードするのが簡単なのでしょう。
(Feb 27, 2009 10:32:06 PM)

Re:複数ログイン(02/25)  
ac_knight  さん
micorosoftさん
> カブドットコム証券では問題なかったのですが、オリックス証券では複数ログインすると先行ログインしているセッションは、ログアウトされてしまいます。ちょっと不便です。PC自動売買している時に、携帯からログインすると、自動売買を邪魔することになってしまいます。
> 負荷分散装置を使って、複数のサーバーで処理させるなら、ログイン時にガードするのが簡単なのでしょう。
-----
そうなんですか!それはかなり不便ですね。。。
自動売買でログインしていたら携帯で下手にログインしようとしたら
それで終わりなんですね。逆にログインを受け付けなかった方がまだ親切ですよね(^-^;
同一アカウントで複数ログインを許している証券会社は排他処理を
どうしてるんでしょうね。
(Feb 27, 2009 10:47:14 PM)

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
Create a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: