VBA:【Selenium】XPathで取得するid属性が動的で要素を取得できない場合の対処方法(Contains)
SeleniumでWebスクレイピングをする際にXPathを使うことが多いと思います。
ところがあるサイトで、ロードするたびにXPathのid部分が変わってしまうものがありました。
そこで「contains」を使うことで対応できたので、「contains」の使い方を説明します。
◆今回の問題
対象サイトで取得したXPathは以下のようなものになり。
「id」がロードするたびにランダムな数字になってしまいXPathで取得できない。
1 |
XPath = "//*[@id="08733633555369331"]/div[2]/div/div[2]/div[2]/div[3]/button" |
◆解決策
以下のように「contains」を使って、ユニークであろう属性から対象を取得するようにしました。「button」タグで「data-role」属性が「export」のものを取得します。
1 |
Driver.FindElementByXPath("//button[contains(@data-role,'export')]").Click |
対象のコードは以下の部分です。
◆「Contains」について
XPath で「Contains」を使うと、特定の文字列を含む要素を取得できるようになります。
1 2 3 4 |
'aタグのtitle属性の場合' Driver.FindElementByXPath("//a[contains(@title,'一覧表')]").Click 'aタグのalt属性の場合' Driver.FindElementByXPath("//a[contains(@alt,'●●に関した情報の一覧表')]").Click |