html layer隐式菜单,selenium中隐式等待 & Frame的切换

等待元素出现

隐式等待

用WebDriver 对象的implicitly_wait方法。 这个方法有一个参数,指明等待最长时间。

driver.implicitly_wait(10)

显式等待

Selenium里面还有一种称之为显式等待的, 可以为一个操作专门指定等待时间

fromselenium.webdriver.support.uiimportWebDriverWait

fromselenium.webdriver.supportimportexpected_conditionsasEC

fromselenium.webdriver.common.byimportBy

ele=WebDriverWait(driver,60).until(EC.presence_of_element_located((By.ID,'1')))

比较长,我们可以顺着读一遍,很像自然语言.

大家不用强记,需要使用的时候,直接拷贝,修改红色部分就可以了。

Frame切换

frame介绍

例子,网页中包含网页:

http://music.163.com/#/discover/toplist?id=60198

iframe 就是一个特殊的html 元素, 它在原来的html 范围内,开辟了一个新的HTML。

如果一个html文档结构比作一个国家的话, iframe就像 在一个国家里面建立一个  附属国家。 里面是一个全新的html文档。就像国中之国

W3C对frame的介绍

iframe:

http://www.w3school.com.cn/tags/tag_iframe.asp

frameset:

http://www.w3school.com.cn/tags/tag_frameset.asp

两者的区别是:

iframe 用于在网页内显示网页。和frameset不同的是,

frameset内置好几个子html

而iframe 只内置一个子html

webdriver切换frame的方法

driver.switch_to.frame(frame_reference)

这个  frame_reference 可以是

frame 元素的 name 属性值 或者ID属性值:contentFrame(浏览器里面看一下)

索引值 (从0开始):0   可能有人问,我咋知道索引?谁先出现就是第一个

frame 所对应的WebElement :driver.find_element_by_tag_name("iframe")

建议优先使用第一种,如果frame元素没有 name 属性,就用下面的两种方法。

比如元素有ID, 就可以根据 find element by id 找到webelement对象,然后, 就是第三种了。

从里面的frame切换回主HTML

driver.switch_to.default_content()

嵌套frame中如何逐层切换

一层一层的切换

driver.switch_to.frame('layer2')

driver.switch_to.frame('layer3')

返回上一层frame

driver.switch_to.parent_frame()

注意动态ID不能使用

前面我们找排行榜歌曲的时候,

f12显示,

寻找ID是找的这个蓝框中的, 为什么不找红框子中的呢?

比我们上面的 div 更贴近我们要找的table元素, 而且它也有id啊。?

a2a66dfe78807ae930b209bc7cdaa0cb.png

很多前端开发框架会自动生成一些元素, 有动态生成的id 会变,

这个是 会变的id 要注意,不能用来选择

怎么识别是动态的呢? 名字往往是一串随机字符,

而不会变的id值通常名字是有意义的单词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值