三流君のソースコード置き場

ブログにソースコードをアップして、ブログの検索機能で利用してます(利用予定です)

よく検索されるキーワード: [VBA]/ [VBS]/ [CreateObject]/ [Excel]/ [ADO]


IE操作 .getElementsByClassName("クラスの名前") で データ取得してみた JRA発走時刻

最近、要望やご指摘のメッセージやメールをいただいてます。
ありがとうございます。
一つ一つ、処理中なので少々(しばらく?)お待ちを。

なんて、挨拶は置いといて

自分で見つけた、
いつものバグ報告から・・・
ライブを始めたいと思います。

前回、修正終了と思っていた
JRA オッズ時刻
ですが、よく確認してみると、
時刻が一ケタの時、7時30分や9時01分とか
頭に改行コード?が入っていました。

バグの修正前コード※下記、問題のコードです。

Public Function JRA_Bodyからオッズの時刻を返す(objIE As InternetExplorer) As String

    Dim strTEMP As String
    Dim strRETURN As String  'リターン値
    Dim n As Integer

    'errでリターン値を初期化
    strRETURN = "ERR 文字列が見つかりませんでした"
    
    'HTMLのBODYテキストを代入
    strTEMP = objIE.Document.body.innerText

    'まず最終オッズを探す
    If InStr(strTEMP, "最終オッズ") > 0 Then
        strRETURN = "最終"
    End If

    '探す 13時03分現在オッズ  2018/12/09 修正
    '次週確認 7時03分現在オッズ 一けた台の時刻の時
    n = InStr(strTEMP, "現在オッズ")
    If n > 0 Then
        strRETURN = Mid(strTEMP, n - 6, 6)  '時刻を取り出す
    End If

    'リターン値をセット
    JRA_Bodyからオッズの時刻を返す = strRETURN

End Function

.bodyから"現在オッズ"を探して、
Mid(strTEMP, n - 6, 6) '時刻を取り出す
なんてやっていたら、
'次週確認 7時03分現在オッズ 一けた台の時刻の時
固定で、6文字抜いていたので、
たぶん、7時03分が5文字なので、7の前の制御コードも取得していたみたいです。

確認時、
画面をみただけだったので、改行されていることに気が付かなかったミスです。
※目視で確認・・・のミスでした。

下記、いつもの脳内垂れ流し解説動画です。
www.youtube.com
1.5倍速 バグ報告ライブ JRA オッズ時刻 .bodyからのテキスト抜き出しでミスってました【三流君】 - YouTube
7:30からが、今回の本題、.getElementsByClassName("クラスの名前") で データ取得の説明です

1.テストで1文字目を確認してみる
デバッグで止めて、一文字目を確認してみる

2.修正する
2.1改行コードが入っているなら、改行コードを消す?
strRETURN = Replace(strRETURN, vbLf, "") '改行vblfを""消す

2.2idやclassで探れないか見る(7分30秒~)

7分30秒~ idやclassで探れないか見る
https://www.youtube.com/watch?v=XPkRKNBO5mQ&t=750

JRAのHP作った人がきちんとしているので、
各データにclassを作って管理されている場合が多いです。
※他のwebページでも、スタイルシートでやっていたりするので、
class Nameがついているページが多いです。

.bodyからテキスト全体を探し、抜き出していましたが、
固有の名前が付いているなら、
class Nameからデータを探る、そんな方法を試してみます。

F12でDOMを探ると

<div class="cell time"><strong>7時56分現在オッズ</strong></div>
が見つかるので、
class="cell time" を テストしてみます。

<div class="cell time"><strong>9時15分現在オッズ</strong></div>

.getElementsByClassName を 使ったソース

Public Function JRA_Bodyからオッズの時刻を返す(objIE As InternetExplorer) As String

    Dim strTEMP As String
    Dim strRETURN As String  'リターン値
    Dim n As Integer
    
    Dim objDOC As HTMLDocument  'ドキュメント
    Dim objHTML As Object
    
    'errでリターン値を初期化
    strRETURN = "ERR 文字列が見つかりませんでした"
    
    'HTMLのBODYテキストを代入
    strTEMP = objIE.Document.body.innerText

    'まず最終オッズを探す
    If InStr(strTEMP, "最終オッズ") > 0 Then
        strRETURN = "最終"
        JRA_Bodyからオッズの時刻を返す = strRETURN
        Exit Function
    End If

    '探す class Nameからデータを探る、そんな方法を試してみます。
    '<div class="cell time"><strong>9時15分現在オッズ</strong></div>
    
    Set objDOC = objIE.Document
    Set objHTML = objDOC.getElementsByClassName("cell time")
    
    If objHTML Is Nothing Then  '↑で見つからない時
        
    Else  '見つかった時
        strRETURN = objHTML.Item(1).innerText  'オッズは二番目なのでitem(1)
    End If

    'リターン値をセット
    JRA_Bodyからオッズの時刻を返す = strRETURN

End Function

少しでも、作成時の参考なれば幸いです。 三流プログラマー Ken3

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
(※詳細は[三流君 三流プログラマーとは?]を見てください)



Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。

三流解説動画の再生リスト
https://www.youtube.com/user/ken3video/playlists

本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)