selenium frame讲解和案例

关键字:python3.6 selenium frame Chrome

selenium自动化测试,frame标签有的时候很令人烦恼。frame类似于在原有主html的基础上又嵌套一个html,而且嵌套的html是独立使用,互不影响。frame的方案经常发生在网页中的导航。
如下:

<!DOCTYPE html>

<html lang="en">
<head>
    <title>FrameTest</title>
</head>
<body>
<iframe src="a.html" id="frame1" name="myframe"></iframe>
</body>
</html>

以上的主html里面嵌套了一个iframe标签,也就是里面还有一个a.html。如果我们需要定位的元素在a.html里面,就需要切换到iframe标签后再去定位。

frame相关的标签有frameset,frame,iframe三种。frameset不需要切换,frame和iframe需要切换。切换的方式是swith_to.frame(reference)。

reference可以传入id、name、index以及selenium的WebElement对象。


case:从路由器配置页面抓取到wan口的ip地址。
1)登录

image.png

Chrome F12,查看元素后,可以看到当前用户名输入框input标签,有一个name属性account,同时它的父节点有一个id属性是dl_margin。
css选择器语法是:#dl_margin input[name='account']


image.png

密码输入框处理同用户输入框,css选择器语法是:#dl_margin input[name='password']

登录按钮直接根据id属性选择:longin_button


image.png

2)frame切换

image.png

登录后首页,点击基本信息后,显示当前wan口的ip地址
image.png

定位到基本信息后,注意到前面的父节点有一个html
image.png

切换过去之后,的确有一个iframe标签。
image.png

但是就这么结束了吗?没有,再往前看,还有一个html标签。
image.png

image.png

目前我们观察的结果是,主html嵌套一个main_screen,在main_screen又嵌套了一个main_iframe_0。所以我们先从主html切换到main_screen,再从main_screen切换到main_iframe_0。代码如下:

driver.switch_to.frame('main_screen')
time.sleep(2) #不加延迟,会概率性切换不过去
driver.switch_to.frame('main_iframe_0')

3)元素定位

image.png

基本信息的元素,onclick属性包含“arrMaintain”。但是如果这样定位,会有两个元素,一个是“基本信息”,另一个是“流量统计”。可以根据元素的文本二次判断。代码如下:

eles=driver.find_elements_by_css_selector("a[onclick*='arrMaintain']")
for ele in eles:
   if '基本信息'in ele.text:
       ele.click()
       break

定位到基本信息后,点击。
4)再次frame处理
本以为点击后,继续查找ip元素即可。但是不料竟然需要重新切换frame。就好像点击基本元素后,整个driver刷新了一样,这块是重点。(如果已经切换过frame,driver对象刷新后,需要重新切换frame,有兴趣的同学可以试下)

#点击后,又回到主html
driver.switch_to.frame('main_screen')
time.sleep(2)
driver.switch_to.frame('main_iframe_0')

5)ip元素定位

image.png

ip元素父元素有一个div元素,id是wan_info。而且ip是tbody下第5个tr,当前tr下面的第3个td。
css选择器语法是#wan_info tr:nth-of-type(5) td:nth-of-type(3)
代码如下:

ip=driver.find_element_by_css_selector('#wan_info tr:nth-of-type(5) td:nth-of-type(3)').text

终于大功告成,通过本次实践,frame需要注意如下:
1.定位到当前元素,多找找父节点,有没有html标签,再找找有无frame和iframe标签。
2.连续frame切换,如果偶发性报错,可以加入延迟试试。
3.无法定位元素时,如果保证之前已经切换过frame,考虑是否需要再次切换frame。

汇总代码如下:(关键信息使用xxxxxx表示)

from selenium import webdriver
import  time
driver=webdriver.Chrome(r'D:\webdriver\chromedriver.exe')
driver.get('xxxxxxxxxxxxxxxxxxxxx')
driver.implicitly_wait(10)
#router login
driver.find_element_by_css_selector("#dl_margin input[name='account']").send_keys('xxxxx')
driver.find_element_by_css_selector("#dl_margin input[name='password']").send_keys('xxxxx')
driver.find_element_by_id('longin_button').click()

#get ip
driver.switch_to.frame('main_screen')
time.sleep(2)
driver.switch_to.frame('main_iframe_0')
eles=driver.find_elements_by_css_selector("a[onclick*='arrMaintain']")
for ele in eles:
    if '基本信息'in ele.text:
        ele.click()
        break
time.sleep(2)


#点击后,又回到主html
driver.switch_to.frame('main_screen')
time.sleep(2)
driver.switch_to.frame('main_iframe_0')

ip=driver.find_element_by_css_selector('#wan_info tr:nth-of-type(5) td:nth-of-type(3)').text
print(f"当前wan口ip是:{ip}")
driver.quit()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 1、页面渲染的步骤是什么? 具体分为5步:(1)HTML解析出DOM树(2)CSS解析出style样式表(3)将两...
    猫熊猫熊阅读 524评论 0 0
  • 厦门艺术张业鸿《世界尽头协会》展览进行中 奥永广场AYOUNGPLAZA位于厦门市体育路88号,始终以“一座有温度...
    e0cbc64add1b阅读 125评论 0 0
  • 知道自己对这段缤纷多彩而又刻骨铭心的生涯缺少一份交代,却迟迟不肯付诸文字。这些天忙于各种学前差事的应付,心里总断断...
    zijing0709阅读 200评论 0 0
  • anchikou阅读 115评论 0 0
  • 身无长物而孑然一身,倦鸟归途而英雄迟暮。铸剑无魂而锋芒未露,岁月蹉跎而春光不复。夕阳西下而心已倦顾,四海飘零而此身...
    窦力行阅读 254评论 0 2