投稿が重なってわかりにくくなってしまいましたね。
ごめんなさい。
FLASHボタンの場合、プログラム上からクリックできないように、値を仕組んでセキュリティ強化をすることができるみたいです。
ですので、今回のサンプルではおそらくクリックできないと思います、それでも、クリックできないことがわかればまた別の方法を考えればいいわけですから、その時こそ他の方が回答しやすくするために、あえて掲載します。
それと、バイナリオプションの購入画面の円安・円高ボタンは、日によって大きさや、位置などが変化すると思います。
その場合はhtmlのそーすから読み込んで下記の値に反映させれば何とかなりそうですね、そのあたりはred0176さんのほうが詳しいと思いますので、一任します。
Button1.locatin=new point(---,---)
Button1.cliensize(---,---)
続きのコードです。
'さらに続きです
Private Function GetMiddleCenter(ByVal ctl As Control) As Point
'コントロールの中央の絶対座標(スクリーン座標)を求める
Dim Cpos As Point = ctl.ClientRectangle.Location
Dim Spos As Point = ctl.PointToScreen(Cpos)
Dim po As Point
po.X = Spos.X + (ctl.Width \ 2) - 2
po.Y = Spos.Y + (ctl.Height \ 2) - 2
Return po
End Function
Private Function MouMovedPos(ByVal pos As Point) As Point
'実際にマウスを移動させる為の補正値を求める
'画面の解像度を取得
Dim dX As Integer = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width
Dim dY As Integer = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height
Dim po As Point
'マウスの移動量を計算(絶対位置)
po.X = CInt(pos.X * (65535 / dX))
po.Y = CInt(pos.Y * (65535 / dY))
Return po
End Function
#End Region
Private Sub WebBrowser1_DocumentCompleted(sender As System.Object, e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Button2_Click(Nothing, Nothing)
End Sub
End Class
上記のコードは自分で書くとなると、かなりの時間を要するので、ぜ~んぶ、「レスキュー花ちゃん」のサイトからの丸写しです。
今回の画像は、実行後自動でクリックした結果です。
それと、1番最初の質問のところに掲載されている、下記のソースですがここをクリックすると画像とか出ませんか?
<embed src="swf/ClaApplicationNormal.swf?ver=20121013092148"
画像が出れば、その画像の文字が「円安・円高ボタン」どちらか一方であれば、そのボタンが目的のボタンの1つです。
気がついた点等ありましたら、また返信して頂けるとうれしいです。
但し、だいぶ時間も立ちましたので、別スレッドで再質問すると他の方の目につき易いかもしれませんね。
おはようございます
先日は、投稿しようと試みましたが、我が家の家計上プロバイダに支払っている金額があまりにも安いため、通信拒否されたみたいでなかなか投稿できませんでしたので、今日になってしまいました。
ご迷惑おかけします。
昨日画像を貼らせて頂きましたが、どの画像はFLASHのボタンの上にButton1を貼り付けたものです。
今日の画像は、「最背面に移動」でButton1がFLASHのボタンの下敷きになっているところです。
遅れましたが、補足情報ありがとうご座います、補足情報を追加してくださると、私も助かりますが(但し、私の場合はいつも他力本願作戦ですけど)他の方が回答するためのよいヒントになると思います。
では昨日の続きです。
昨日のコードの真下に下記のコードをコピペして、貼り付けてください。
'昨日の続きここからです
'マウス操作を設定する為の構造体
'mx 'マウスのX座標を指定
'my 'マウスのY座標を指定
'mFrg 'マウスの動作を指定(下記の定数等)
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> Private Structure MOEVENTS
Public mx As Integer
Public my As Integer
Public mFrg As Integer
End Structure
Private Const INPUT_MOUSE As Integer = 0
Private Const MOUSE_MOVED As Integer = &H1 'マウスを移動する
Private Const MOUSEEVENTF_ABSOLUTE As Integer = &H8000& '移動時、絶対座標を指定
Private Const MOUSEEVENTF_LEFTUP As Integer = &H4 '左ボタンUP
Private Const MOUSEEVENTF_LEFTDOWN As Integer = &H2 '左ボタンDown
Private sPos As Point
#End Region
Private Sub f1() Handles MyBase.Shown
Button2.Visible = False
WebBrowser1.Navigate("http://orange.2-d.jp/flash/kiso/10.html")
End Sub
#Region "マウスの操作の指示部分の設定"
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
'--------------- 基本操作部分 ---------------
'コマンドボタンのスクリーン座標を取得
Dim pos1 As Point = GetMiddleCenter(Button1) 'Button1 の中央の絶対座標を求める
Dim po As Point = MouMovedPos(pos1) '上記へ移動する為の補正値
Dim MEs() As MOEVENTS 'マウス操作を設定する為の構造体
ReDim Preserve MEs(2) '上記を配列で使用
MEs(0).mx = po.X : MEs(0).my = po.Y 'マウスカーソルの移動先
MEs(0).mFrg = MOUSE_MOVED Or MOUSEEVENTF_ABSOLUTE 'マウスを絶対座標位置へ移動
MEs(1).mFrg = MOUSEEVENTF_LEFTDOWN 'マウスの左ボタンを押す
MEs(2).mFrg = MOUSEEVENTF_LEFTUP 'マウスの左ボタンを離す
'--------------- 追加操作部分 ---------------
sPos = Cursor.Position 'このボタンをクリックした位置座標
po = MouMovedPos(sPos) '上記へ移動する為の補正値(★自作関数)
ReDim Preserve MEs(3)
MEs(3).mx = po.X : MEs(3).my = po.Y 'マウスカーソルの移動先
MEs(3).mFrg = MOUSE_MOVED Or MOUSEEVENTF_ABSOLUTE 'マウスを絶対座標位置へ移動
'--------------------------------------------
'関数の実行(Button1 の中央に移動し、クリックし、元の位置に戻る)
Call SedMouseInput(MEs)
End Sub
#End Region
#Region "自作関数(SedMouseInput 他)の実行部分"
Private Function SedMouseInput(ByVal MEs() As MOEVENTS) As Integer
Dim eventN As Integer = MEs.GetUpperBound(0)
Dim arrayINPUT(eventN) As INPUT
For i As Integer = 0 To eventN
arrayINPUT(i).type = INPUT_MOUSE
With arrayINPUT(i).ki
.dx = MEs(i).mx 'マウスの移動時のX方向への移動量
.dy = MEs(i).my 'マウスの移動時のY方向への移動量
.mouseData = 0 '必要としません
.dwFlags = MEs(i).mFrg 'マウスイベント
.time = 0 'デフォルトの設定
.dwExtraInfo = IntPtr.Zero '必要としません
End With
Next
'関数の実行(連続でマウスの操作を実施)'個々のマウスの操作の間に割り込みが入らない。
SendInput(arrayINPUT.Length, arrayINPUT, Marshal.SizeOf(GetType(INPUT)))
End Function
またもや文字制限ですので、次の投稿に記載します。
こんばんは
今回も他力本願作戦で行こうと思いましたが、なかなか投稿してくださる方がいませんので、今回は自分で投稿しています。
情報がだいぶ揃いましたので、どなたかが投稿してくださると思いましたが、まだですね。
だいぶ時間がたちましたので、もうred0176さんが自力で解決されましたでしょうか?
残っている問題は
(1)その後のページ(アカウントが必要)
(2)FLASH上のボタン操作(クリック?)
(3)GMM.COMのリアルタイムの数値取得
上記の3点ですね?
(1)は全く想像がつきませんので他の方にお任するとして、(2)を考えたいと思います、FLASH上のボタン操作とは自動クリックという仮定で考えました、間違っていましたらごめんなさい。
(3)も他の方にお任せすることにします。
ところで、私の方はGMOクリック証券のFLASHのボタンを実際に見たいと思いまして、口座の開設の手続きをしましたが、お金に関わることですので、怖くなって只今キャンセルの手続き中です。
キャンセルの手続きで感じたこたがあります。
(1)氏名
(2)生年月日
(3)ご登録住所
(4)ご登録電話番号
(5)口座開設申込み時にお送りしたお問い合わせ番号
キャンセルの手続きに以上の項目が必要だそうです。
ということは、かなりセキュリティが厳しいな~っと思いました。
ですので、普通のFLASHボタンの扱いでは自動クリックはだいぶ問題があるように感じています。
簡単な作りのFLASHボタンをクリックする場合はred0176さんの方が多分詳しいと思いますが、とりあえず簡単な方法の自動クリックをしてみたいと思います。
FLASHボタンは”http://orange.2-d.jp/flash/kiso/10.html”のものを使っています。
方法
マウスポインターをプログラム上からFLASHボタンの上に移動して、プログラム上からクリックします。
実験
1.FormにWebBrowser1、Button1、Button2を貼り付けます、Button1はパネルでもピクチャーボックスでもいいです、サンプルではButton1にしてます。
2.下記のコードを実行してButton1をFLASHボタンの上になるようにデザイナー画面で調整します、大きさはFLASHボタンより少し小さめに調整してください。
Public Class Form1
Private Sub f1() Handles MyBase.Shown
Button2.Visible = False
WebBrowser1.Navigate("http://orange.2-d.jp/flash/kiso/10.html")
End Sub
End Class
3.調整が終わりましたら、Button1を「最背面に移動」でWebBrowser1の下敷きにして見えないようにしてください。
4.画面を大きくしたりするとButton1の位置がFLASHボタンからずれてしまいますので、アンカー等で調整してください、またはフォームの大きさとButton1の位置が同じになるようにしてください。(時間のロスになりますので、実験段階ではこの作業はしないほうがいいと思います)
5.2で記入した
Public Class Form1
Private Sub f1() Handles MyBase.Shown
Button2.Visible = False
WebBrowser1.Navigate("http://orange.2-d.jp/flash/kiso/10.html")
End Sub
End Class
は、1度削除して下記のコードをコピペしてください。
Imports System.Runtime.InteropServices
Public Class Form1
#Region "Win32 API 関数関係の宣言"
'SendInput 関数でマウス操作に関する動作等を指定する MOUSEINPUT 構造体
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Private Structure MOUSEINPUT
Public dx As Integer 'マウス位置の指定座標
Public dy As Integer '絶対座標/相対座標で指定
Public mouseData As Integer 'ホイールの移動量を設定
Public dwFlags As Integer 'マウスの動作を指定するフラグを設定
Public time As Integer 'タイムスタンプ(このメンバは無視されます)
Public dwExtraInfo As IntPtr '追加情報(このメンバは無視されます)
End Structure
'SendInput 関数の設定に使用する INPUT 構造体
'type SendInput 関数の使用目的 0=マウス 1=キーボード 2=ハードウェア
'ki KEYBDINPUT 構造体
<StructLayout(LayoutKind.Sequential, Size:=28)> _
Private Structure INPUT
Public type As Integer
Public ki As MOUSEINPUT
End Structure
'キーストローク、マウスの動き、ボタンのクリックなどを合成します。
' nInputs 入力イベントの数
' pInputs() 挿入する入力イベントの配列
' cbsize 構造体のサイズ
' 戻り値 挿入することができたイベントの数を返す。
' ブロックされている場合は 0 を返す
<DllImport("user32.dll", CharSet:=CharSet.Auto)> Private Shared Function SendInput(ByVal nInputs As Integer, ByVal pInputs() As INPUT, ByVal cbsize As Integer) As Integer
End Function
文字制限上ここまでです。
続きは次の投稿に記載します。
たびたび失礼します。
ログインフォームのサンプルを掲載させて頂きます。
その前にOKWave のスタッフさんへ、.
この投稿がふさわしくない場合は、その旨を red0176さんに伝えてください、その後削除してください。
Formに WebBrowserとButtonを貼り付けてください。
その後、下記のコードをコピペしてください。
Public Class Form1
Const URL_NAME As String = "https://okwave.jp/login"
Private Sub f1() Handles MyBase.Shown
Button1.Visible = False
WebBrowser1.ScriptErrorsSuppressed = True
WebBrowser1.Navigate(URL_NAME)
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
Button1_Click(Nothing, Nothing)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim st As String
st = WebBrowser1.Url.ToString
'ログインページから移動した場合はプロシージャを抜ける
If st <> URL_NAME Then
Exit Sub
End If
'htmlの要素
Dim login As HtmlElement
'IDとパスワード
WebBrowser1.Document.GetElementById("mailaddress").InnerText = "ここにred0176さんのIDを入れる "
WebBrowser1.Document.GetElementById("password").InnerText = "ここにred0176さんのパスワードを入れる "
'ログインをクリックする
For Each login In WebBrowser1.Document.All
If login.GetAttribute("alt") = "ログイン" Then
login.InvokeMember("click")
Exit For
End If
Next
End Sub
End Class
OKWaveのログインはこのようにできますが、GMOクリック証券はセキュリティが厳しいと思いますので簡単にはログインできないかもしれません。
お返事ありがとうございます
>言葉足らずで申し訳ございません。
それはありません、私の読解力不足です。
>円安・円高ボタン
FLASHのボタンとはその意味でしたか。
FLASHで作成されたボタンのことですね。
http://バイナリーオプション.com/providers/gmo.html
上記のURLでそれらしきボタンを見つけましたが、下記のhtmlのソースを見ると単なる画像でクリックすることができません。
画像を掲載しますので、このボタンでいいかどうか教えていただけますか?
<img src="../common/img/p/gmo.png" style="margin:10px 0 0 5px;">
img src=はページの中に画像を貼り付けるときに使います。
="../common/img/p/gmo.png"は、サーバー内にある画像のパスです。
red0176さんが提示してくださったhtmlの中には「円安・円高ボタン」は見当たりません。
GMOクリック証券にログインしないと、「円安・円高ボタン」のページにたどり着くことができないのでしょうか?
仮にログインが必要な場合は、ログイン画面からスタートすることになりますね。
とりあえず、http://バイナリーオプション.com/providers/gmo.htmlのページの左上にある"TOP"ボタンを自動クリックするサンプルを掲載します。
下記のhtmlを参考にしています。
<li><a href="http://xn--eckm3b6d2a9b3gua9f2d.com/">TOP</a></li>←ここの部分です。
<li><a href="http://xn--eckm3b6d2a9b3gua9f2d.com/ranking/">人気ランキング</a></li>
<li><a href="http://xn--eckm3b6d2a9b3gua9f2d.com/hikaku/">取引ルールの比較</a></li>
<li><a href="http://xn--eckm3b6d2a9b3gua9f2d.com/appeal/">バイナリーオプション入門講座</a></li>
<li><a href="http://xn--eckm3b6d2a9b3gua9f2d.com/strategy/">バイナリーオプションの戦略</a></li>
FormにWebBrowserとButtonを貼り付けます。
下記のコードをコピペしてください。
Public Class Form1
Private Sub f1() Handles MyBase.Shown
'Button1を非表示にします
Button1.Visible = False
'WebBrowser1に"http://バイナリーオプション.com/providers/gmo.html"を表示します
WebBrowser1.Navigate("http://バイナリーオプション.com/providers/gmo.html")
End Sub
'"http://バイナリーオプション.com/providers/gmo.html"の読み込みが完了した時点で発生するイベントです
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
'Button1_Clickのメソッドです
Button1_Click()
'Button1_Clickのイベントハンドラが→の場合はButton1_Click(ByVal sender As Object, ByVal e As EventArgs)
'Button1_Clickのメソッドも→Button1_Click(Nothing, Nothing)のようにします
End Sub
'Button1_Clickのイベントハンドラです
Private Sub Button1_Click() Handles Button1.Click
'"http://バイナリーオプション.com/providers/gmo.html"内のhtmlの要素
Dim btnname As HtmlElement
'リンクの要素を全て取得するループ
For Each btnname In WebBrowser1.Document.Links
'タグの外側の文字列が"TOP"の場合に"TOP"のボタンをクリックします
If btnname.OuterText = "TOP" Then
btnname.InvokeMember("click")
End If
Next
End Sub
End Class
少し時間がかかりますが、自動で"TOP"のボタンがクリックされ、ページが切り替わります。
こんばんは
すいません、「FLASHのボタン」ってなんでしょうか?
GMOクリック証券のサイトを見ましたが、「FLASHのボタン」は見つかりませんでした。
red0176 さんが掲載してくださったhtmlには「FLASHのボタン」はありません。
「FLASHのボタン」とはアドビのダウンロードページのことでしょうか?
>ボタンをVBで操作したいのですがどの様にすれば出来るのでしょうか
ボタンを押すには、InvokeMember("click")で操作できます。
「FLASHのボタン」がありませんので、とりあえずリンクをクリックするサンプルを作成しました。
Public Class Form1
Private Sub f1() Handles MyBase.Shown
WebBrowser1.ScriptErrorsSuppressed = True 'デザイナー画面でも変更可能です
WebBrowser1.Navigate("https://www.click-sec.com/corp/ad/general/fx.html?aid=fsal721&cid=gnfx&gclid=CPXusZ36h7MCFUdgpQodATUAig")
End Sub
Private Sub 全14通貨ペア驚きの狭さ原則固定スプレッドもっと詳しくToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles 全14通貨ペア驚きの狭さ原則固定スプレッドもっと詳しくToolStripMenuItem.Click
linkname(sender.ToString) 'linknameメソッド
End Sub
Private Sub 人気の高金利通貨も業界最高水準スワップポイントもっと詳しくToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles 人気の高金利通貨も業界最高水準スワップポイントもっと詳しくToolStripMenuItem.Click
linkname(sender.ToString) 'linknameメソッド
End Sub
Private Sub 大切な資産も安全もっと詳しくToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles 大切な資産も安全もっと詳しくToolStripMenuItem.Click
linkname(sender.ToString) 'linknameメソッド
End Sub
'全ての項目に対応するメソッド
Private Sub linkname(ByVal st As String)
Dim llinkst As String = st.ToString
Dim watchlink As HtmlElement 'htmlの要素
'watchlinkはhtmlの要素 WebBrowser1.Document.Linksの内容でループする。
For Each watchlink In WebBrowser1.Document.Links
If watchlink.InnerText = llinkst Then
watchlink.InvokeMember("click") 'watchlink自動をクリック
Exit For '同じリンクが2箇所有る場合、1度目のリンクがクリックされた時点でループを抜ける
'1度目のリンクがクリックされた時点でループを抜ける
End If
Next
End Sub
End Class
このようなケースの場合注意が必要です。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=11056
お礼
試してみたいと思います!ありがとうございます! ちなみにインターネットオプションのキャッシュから.swfを採取し .flaに変換してみたのですがこれは使えないのでしょうか? // flash 10, total frames: 2, frame rate: 24 fps, 980x577 px, compressed, network access alowed metadata <rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'><rdf:Description rdf:about=\'\' xmlns:dc=\'http://purl.org/dc/elements/1.1\'><dc:format>application/x-shockwave-flash</dc:format><dc:title>Adobe Flex 3 Application</dc:title><dc:description>http://www.adobe.com/products/flex</dc:description><dc:publisher>unknown</dc:publisher><dc:creator>unknown</dc:creator><dc:language>EN</dc:language><dc:date>2012/06/25</dc:date></rdf:Description></rdf:RDF> // unknown tag 82 length 114314 // unknown tag 76 length 52 movieClip 3 __brokenImage { } movieClip 5 { } movieClip 7 { } movieClip 8 CloseButtonOver { } movieClip 9 CloseButtonDisabled { } movieClip 11 { } movieClip 12 CloseButtonUp { } movieClip 13 CloseButtonDown { } movieClip 15 mx.skins.cursor.BusyCursor { } movieClip 17 MenuRadioDisabled { } movieClip 19 MenuCheckDisabled { } movieClip 21 MenuRadioEnabled { } movieClip 23 MenuBranchEnabled { } movieClip 25 MenuSeparator { } movieClip 27 MenuBranchDisabled { } movieClip 29 MenuCheckEnabled { } movieClip 32 { } movieClip 33 mx.skins.cursor.DragCopy { } movieClip 34 mx.skins.cursor.DragMove { } movieClip 37 mx.skins.cursor.DragReject { } movieClip 39 mx.skins.cursor.DragLink { } // unknown tag 87 length 5402 movieClip 67 { } // unknown tag 88 length 99 // unknown tag 82 length 1262393 // unknown tag 76 length 8267 }