selenium切换到iframe

一,定位iframe

1. 有id,并且唯一,直接写id

driver.switch_to_frame("x-URS-iframe")
driver.switch_to.frame("x-URS-iframe")

2. 有name,并且唯一,直接写name

driver.switch_to_frame("xxxx")
driver.switch_to.frame("xxxx")

3. 无id,无name,先定位iframe元素

iframe = driver.find_elements_by_tag_name("iframe")[0]
driver.switch_to_frame(iframe)
driver.switch_to.frame(iframe)

4. 通常采用id和name就能够解决绝大多数问题。但有时候frame并无这两项属性,则可以用index和WebElement来定位:

index从0开始,传入整型参数即判定为用index定位,传入str参数则判定为用id/name定位

WebElement对象,即用find_element系列方法所取得的对象,我们可以用tag_name、xpath等来定位frame对象
举个栗子:

<iframe src="myframetest.html" />

用xpath定位,传入WebElement对象:

driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src,'myframe')]"))

5. 从frame中切回主文档(switch_to.default_content())

切到frame中之后,我们便不能继续操作主文档的元素,这时如果想操作主文档内容,则需切回主文档。

driver.switch_to.default_content()

6. 嵌套frame的操作(switch_to.parent_frame())

有时候我们会遇到嵌套的frame,如下:

<html>
    <iframe id="frame1">
        <iframe id="frame2" / >
    </iframe>
</html>
  1. 从主文档切到frame2,一层层切进去
driver.switch_to.frame("frame1")
driver.switch_to.frame("frame2")
  1. 从frame2再切回frame1,这里selenium给我们提供了一个方法能够从子frame切回到父frame,而不用我们切回主文档再切进来。
driver.switch_to.parent_frame()  # 如果当前已是主文档,则无效果

有了parent_frame()这个相当于后退的方法,我们可以随意切换不同的frame,随意的跳来跳去了。

所以只要善用以下三个方法,遇到frame分分钟搞定:

driver.switch_to.frame(reference)
driver.switch_to.parent_frame()
driver.switch_to.default_content()

二,补充

另外补充一下,之前曾看到过用点分法来切入嵌套frame的方法,但我试验之后发现并不能定位到frame,如果有同学可以成功,麻烦留言告知一下,用法如下:

driver.switch_to.frame(‘frame1.0.frame3’)
1
据说以上代码可以切到 “frame1” 下的 “第一个frame” 下的 “frame3” 中。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 使用Python和Selenium切换iframe的步骤如下: 1. 使用driver.switch_to.frame()方法切换到目标iframe,可以通过iframe的id、name或者index来定位。 2. 在iframe中进行操作,例如查找元素、输入文本等。 3. 使用driver.switch_to.default_content()方法切换回主页面。 示例代码如下: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("http://example.com") # 切换到第一个iframe iframe = driver.find_element_by_tag_name("iframe") driver.switch_to.frame(iframe) # 在iframe中进行操作 element = driver.find_element_by_xpath("//input[@name='username']") element.send_keys("username") # 切换回主页面 driver.switch_to.default_content() # 关闭浏览器 driver.quit() ``` ### 回答2: 在使用Python Selenium进行自动化测试的过程中,有时我们需要在页面中切换iframe,以便于操作页面中的元素。在页面中iframe是一个独立的HTML文档,它嵌套在主页面中,需要通过switch_to.frame()方法进行切换。 第一步,先要定位iframe元素,可以通过以下代码实现: ``` iframe = driver.find_element_by_xpath("xpath_of_iframe") ``` 第二步,使用switch_to.frame()方法切换iframe中,可以通过以下方式切换: ``` driver.switch_to.frame(iframe) ``` 这个时候,当前driver所在位置就已经切换到了iframe里面,我们可以在这个位置操作页面中的元素。 最后,如果需要回到主页面,则可以使用switch_to.default_content()方法进行切换: ``` driver.switch_to.default_content() ``` 以上就是Python Selenium切换iframe的方法,需要注意的是,iframe在页面中可能有多个,所以在定位iframe时要准确。同时也要注意,如果元素操作完成后没有切换回主页面,可能会导致后续操作失败,所以要格外小心。 ### 回答3: 在进行Web自动化测试时,经常需要与iframe进行交互操作,python的selenium库提供了丰富的API来实现iframe切换,在这里我将详细讲解python selenium如何实现iframe切换。 如果一个页面中包含一个或多个iframe,则测试时需要先切换到对应的iframe,然后才能对该iframe内部的元素进行操作。因此,切换iframe是很重要的一步。 1. 通过frame(iframeElem)切换 frame(iframeElem)方法接收一个参数,即目标iframe对应的WebElement对象,代码实现如下: ```python # 导入selenium库 from selenium import webdriver from selenium.webdriver.common.by import By # 初始化selenium webdriver driver = webdriver.Chrome() # 打开网址 driver.get('https://www.baidu.com') # 切换到百度输入框的iframe iframeElem = driver.find_element(By.XPATH, '//iframe[@id="s_lg_img_new"]') driver.switch_to.frame(iframeElem) # 在iframe内部输入关键词 searchElem = driver.find_element(By.XPATH, '//input[@id="kw"]') searchElem.send_keys('selenium') # 切换回主页面 driver.switch_to.default_content() ``` 2. 通过frame(index)切换 frame(index)方法接收一个参数,即目标iframe在当前页面中的索引值,代码实现如下: ```python # 初始化selenium webdriver driver = webdriver.Chrome() # 打开网址 driver.get('https://www.baidu.com') # 切换到百度输入框的iframe driver.switch_to.frame(0) # 等同于 driver.switch_to.frame(driver.find_elements(By.TAG_NAME, "iframe")[0]) # 在iframe内部输入关键词 searchElem = driver.find_element(By.XPATH, '//input[@id="kw"]') searchElem.send_keys('selenium') # 切换回主页面 driver.switch_to.default_content() ``` 3. 通过parent_frame()方法切换 parent_frame()方法用于从当前iframe返回到其父级iframe,如果没有父级iframe,则返回主页面。代码实现如下: ```python # 初始化selenium webdriver driver = webdriver.Chrome() # 打开网址 driver.get('https://www.baidu.com') # 切换到百度输入框的iframe driver.switch_to.frame(0) # 在frame1内部点击链接,跳转到frame2 linkElem = driver.find_element(By.XPATH, '//a[@id="toFrame2"]') linkElem.click() # 切换到frame2 driver.switch_to.frame(0) # 在frame2内部输入 searchElem = driver.find_element(By.XPATH, '//input[@id="kw"]') searchElem.send_keys('selenium') # 切换回frame1 driver.switch_to.parent_frame() # 再次切换到frame2 driver.switch_to.frame(0) # 点击返回到父级iframe driver.find_element(By.XPATH, '//a[text()=" 返回上一级"]').click() # 切换回主页面 driver.switch_to.default_content() ``` 通过上述三种方法,我们可以轻松实现在iframe之间的自由切换,提高Web自动化测试的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西门一刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值