《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