《SeleniumBasic 3.141.0.0 - 在VBA中操作浏览器》系列文章之十二:框架切换

下面以东萍象棋的棋谱搜索页面为例讲解。网址http://www.dpxq.com/hldcg/search/

在该网页上方,“更改棋库”后面有个文本框,如果想要用SeleniumBasic修改“大师对局”这几个字,你需要分析页面构成,查看该网页元素位于何处。

按下F12,在开发工具中可以看到:大师对局的id是s_owner,位于框架中。框架的id是search_end_pos。

下面的程序,切换到框架中,定位到文本框和右侧的按钮,修改内容并点击了“确定”。

    Dim Locator As New SeleniumBasic.ITargetLocator
    WD.Navigate.GoToUrl "http://www.dpxq.com/hldcg/search/"
    Dim frm As SeleniumBasic.IWebElement
    Set frm = WD.FindElementById("search_end_pos")
    WD.SwitchTo.Frame frm
        Dim text As SeleniumBasic.IWebElement
        Set text = WD.FindElementById("s_owner")
        text.Clear
        text.SendKeys "ryueifu"
        Dim OK As SeleniumBasic.IWebElement
        Set OK = WD.FindElementByXPath("//*[@id='topTABLE']/tbody/tr[2]/td[2]/input[2]")
        OK.Click
    WD.SwitchTo.DefaultContent
    Debug.Print WD.PageSource

 另外Frame方法中的identifier参数,可以以下3种类型之一

IWebElement

String

Integer/Long

上面的例子,先定位到iframe元素,再切换。其实也可以不定位,直接切换至指定id或name的框架,或切换至指定编号的框架。以下两种写法都是正确的:

WD.SwitchTo.Frame 0 '切换到第0个框架
Debug.Print WD.FindElementById("s_owner").tagName
WD.SwitchTo.DefaultContent

WD.SwitchTo.Frame "search_end_pos" '切换到指定id或name的框架
Debug.Print WD.FindElementById("s_owner").tagName
WD.SwitchTo.DefaultContent

posted @ 2020-09-19 14:34  ryueifu  阅读(3115)  评论(0编辑  收藏  举报