アプリ版:「スタンプのみでお礼する」機能のリリースについて

excel vba での次の操作をどう書けばよいのか教えてください。

下記htmlでは「予想まとめ」が選ばれているが、「枠・馬番順」をselect状態にしたいです。



<ul class="localTab">
<li id="oddsPositionTab"><a href="#">枠・馬番順</a></li>
<li id="oddsRankTab"><a href="#">人気高配当順</a></li>
<li id="oddsViewerTab">
<a href="https://keiba.rakuten.co.jp/odds/compare/RACEID/ …オッズ比較ツール</a>
</li>
<li id="matomeTab"><span class="selected">予想まとめ</span></li>
</ul>

質問者からの補足コメント

  • うーん・・・

    良く理解しないでの質問ですみません。でも回答有難うございます。
    いろいろ考えて以下のような、姑息な処理で乗り切ろうと思います。
    もっと良い書き方あればご教授お願いします。


    Do
    For Each obj In ie.document.getElementsByTagName("a")
    s = obj.outerHTML
    If InStr(s, "枠・馬番順") > 0 Then
    obj.Click
    Exit Do
    End If
    Next
    Loop
    ‥‥

      補足日時:2021/01/31 11:41

A 回答 (2件)

No1です



>もっと良い書き方あればご教授お願いします。
ご提示の処理は、
>select状態にしたいです。
ではなく、「クリックする」処理です。

要素にidが振られているので、わざわざ探す必要もないでしょうし、2重ループの必要性はまったく理解できません。
htmlの更新等で文字が一文字でも変わると、無限ループに陥りそうです。
以下で、十分なのでは?
 ie.document.querySelector("#oddsPositionTab a").Click

万一の(更新時などの)エラーにも配慮しておくなら、「要素の有無をチェックしてからクリック」の手順にしておけば宜しいかと。
    • good
    • 0
この回答へのお礼

素晴らしい。
この9行を、.Click行の1行に、そのまま書き直したら、うまく動作しました。
querySelectorについてもうすこし勉強します。。
大変助かりました。ありがとうございました。

>2重ループの必要性
nextのあとに、リトライやメッセージ出力を考えていましたが、このところは省略してましたすみません。

お礼日時:2021/01/31 13:04

こんばんは



ご質問の意味がさっぱりわかりませんが・・・

>下記htmlでは「予想まとめ」が選ばれているが
それって「class="selected"」のことを指しているのでしょうか?
もしそうなら、それはあくまでもそのページのローカルルールであって、一般的に言う「選ばれている」状態とは関係はありませんね。

>「枠・馬番順」をselect状態にしたいです。
上記と同じように「class="selected"」を設定したいってことでしょうか?
あるいは、一般に言う、「テキストを選択状態」にしたいってことでしょうか?

そもそも、どのようにhtmlを」取得しているのかすら不明ですが、仮にDocumentが取得(=仮に、doc)できているとするなら、前者の場合で li 要素に設定するのなら
 doc.querySelector('#oddsPositionTab').className = "selected"
といった要領でできるでしょう。

もしも、後者の場合は、一般的なブラウザ(IEは除く)であれば、以下のような要領で可能です。
https://developer.mozilla.org/en-US/docs/Web/API …

※ なさりたいことがよくわかりませんが、ご参考にでもなれば。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!