最近、要望やご指摘のメッセージやメールをいただいてます。
ありがとうございます。
一つ一つ、処理中なので少々(しばらく?)お待ちを。
なんて、挨拶は置いといて
自分で見つけた、
いつものバグ報告から・・・
ライブを始めたいと思います。
前回、修正終了と思っていた
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