VBAのIE操作でヤフーファイナンスの検索後にタイトルを取得するには
未読分:2件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#2 2014年11月11日(火)20時37分 From: 管理人 | 返事 削除 変更 |
yahooファイナンスの詳細ページのHTMLソースを見ると企業名はh1タグ、企業コードはdtタグでくくられていたので、添え字を付け加えて直接取得する方法にしてみました。 以下をご確認ください。 Sub sample() Dim objIE As InternetExplorer Call ieView(objIE, "http://finance.yahoo.co.jp/") Call formText(objIE, "query", "ホテルオークラ") Call tagClick(objIE, "input", "株価検索") '企業名 Debug.Print objIE.document.body.getElementsByTagName("h1")(0).innerText '企業コード Debug.Print objIE.document.body.getElementsByTagName("dt")(0).innerText End Sub Sub ieView(objIE As InternetExplorer, _ urlName As String, _ Optional viewFlg As Boolean = True, _ Optional ieTop As Integer = 0, _ Optional ieLeft As Integer = 0, _ Optional ieWidth As Integer = 600, _ Optional ieHeight As Integer = 800) 'IEのオブジェクトを作成する Set objIE = CreateObject("InternetExplorer.Application") 'IEを表示・非表示 objIE.Visible = viewFlg objIE.Top = ieTop 'Y位置 objIE.Left = ieLeft 'X位置 objIE.Width = ieWidth '幅 objIE.Height = ieHeight '高さ '指定したURLのページを表示する objIE.Navigate urlName 'IEが完全表示されるまで待機 Call ieCheck(objIE) End Sub Sub ieCheck(objIE As InternetExplorer) Dim timeOut As Date timeOut = Now + TimeSerial(0, 0, 10) Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Sleep 100 If Now > timeOut Then objIE.Refresh timeOut = Now + TimeSerial(0, 0, 10) End If Loop timeOut = Now + TimeSerial(0, 0, 10) Do Until objIE.document.ReadyState = "complete" DoEvents Sleep 100 If Now > timeOut Then objIE.Refresh timeOut = Now + TimeSerial(0, 0, 10) End If Loop End Sub Sub formText(objIE As InternetExplorer, _ nameValue As String, _ tagValue As String) 'テキストボックス・パスワードボックスに値を入力 For Each objTag In objIE.document.getElementsByTagName("input") If objTag.Name = nameValue Then objTag.Value = tagValue Exit For End If Next 'テキストエリアに値を入力 For Each objTag In objIE.document.getElementsByTagName("textarea") If objTag.Name = nameValue Then objTag.Value = tagValue Exit For End If Next End Sub Sub tagClick(objIE As InternetExplorer, _ tagName As String, _ tagStr As String) 'タグをクリック For Each objTag In objIE.document.getElementsByTagName(tagName) If InStr(objTag.outerHTML, tagStr) > 0 Then objTag.Click Call ieCheck(objIE) Exit For End If Next End Sub |
Message#1 2014年11月6日(木)07時49分 From: CVDVD | 返事 削除 変更 |
表題の通りでVBAのIE操作でヤフーファイナンスの検索後にタイトルを取得するにはどうしたらいいでしょうか? ヤフーファイナンスで会社名を検索してその会社のタイトルと企業コードを取得したいのですが、その文字を取得する方法が分かりません。 一応こちらでやったもので試したところ検索前のページが取得されてしまいます。 具体的には2ページ目のタイトルを取得すると1ページ目のタイトルと同じものが取得されてしまいます。 環境はWindows8のExcel2010を利用しています。 ご教授よろしくお願いします。 ■VBAのIE操作ソース Dim objIE As New InternetExplorer Sub test() Dim str企業名 As String Dim myObj As Object str企業名 = "ホテルオークラ" Set objIE = CreateObject("InternetExplorer.application") With objIE .navigate "http://finance.yahoo.co.jp/" .Top = 0 .Left = 0 .Width = 1000 .Visible = True End With Call IE_wait For Each myObj In objIE.document.all.tags("input") If myObj.ID = "searchText" Then myObj.Value = str企業名 Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.ID = "searchButton" Then myObj.Click Call IE_wait Exit For End If Next Debug.Print objIE.document.Title Set objIE = Nothing End Sub ■処理待ち Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降