vbaとseleniumを使ってedge の自動化を行おうとしております。
iframeで開かれるページのElement取得がうまくいきません。
対象ページは下記のような構成になっており、①②③Elementを操作したいのですが、
「実行時エラー'7'
NoSuchElementError
Element not found for Css=#SyozokuCode」と表示されます。-④
iframeを切り替える必要があると思うのですが、いろいろ試しましたが、idが指定されていないiframeへの切り替え方がわかりません。方法を教えていただけないでしょうか。
html
1<iframe class="ui-helper-hidden" name="XW_BEAT" src "../x/lib/blankhtm" momo="・・・" cd_frame_id_="・・・">... 2</iframe> 3 ・ 4 ・ 5<iframe src "javascript:'' tabindex> 6 ・ 7 ・ 8① <button id="output" clas="・・・">...</button> 9 ・ 10 ・ 11② <input class="txt SyozokuCode ・・・" id="SyozokuCode" size="・・・" title="・・・" type="text" maxlength="・・・" style="・・・"> 12③ <input type="checkbox id="chkKaiSyozoku" class="chkKaiSyozoku"> 13 ・ 14 ・ 15</iframe>
以下、試したコードです。
vba
1 Dim driver As New Selenium.WebDriver 2 driver.Start "edge" 3 driver.Window.Maximize 4 driver.Get "http://・・・top.htm" 5 6 ' ログイン 7 driver.FindElementById("XW_LOGIN_USER").SendKeys "・・・" 8 driver.FindElementById("XW_LOGIN_PW").SendKeys "・・・" 9 driver.FindElementById("XW_LOGIN").Click 10 Sleep 3000 11 12 ' 月次処理 13 driver.FindElementByCss("#xw35").Click 14 Sleep 3000 15 16 ' 月次社員一覧 17 driver.FindElementByCss("#XW_TABS > ul > li:nth-child(4)").Click 18 ' Frameの切り替え これが動かないので以降の FindElementBy が Not Found になる!? 19 driver.SwitchToFrame driver.FindElementByTag("iframe") 20 ' 所属を入力 ここで上記エラーが発生 21④ driver.FindElementByCss("#SyozokuCode").SendKeys "109" 22
FindElementsByTag("iframe")(1) を試してみました。
「インデックスが境界の範囲外です」エラーが発生してしまいます。(0) にしても同様です。
.IsElementPresent(myBy.Tag("iframe")) も試したのですが False が返ってきました。
何か根本的な間違いをしているのでしょうか?
Dim bFlag As Boolean
bFlag = False
bFlag = driver.IsElementPresent(myBy.Tag("iframe"))
bFlag = driver.IsElementPresent(myBy.Css("#xw72 > iframe"))
bFlag = driver.IsElementPresent(myBy.XPath("//*[@id=""xw72""]/iframe"))
上記いずれもFalseが返ってきます。
どのようにすればiframeが取得できるのでしょうか?何か根本的なところに抜けがあるのでしょうか?
回答2件
あなたの回答
tips
プレビュー