Selenium多窗口找不到元素

当出现多窗口的时候元素定位不生效,提示找不到对应的元素。NoSuchElementException:xxx

 这个时候多半是你没有切换句柄导致的,下面提供两个切换的方式:

第一个:直接使用下标操作

handles = wb.window_handles #获取所有的窗口
wb.switch_to.window(handles[1])#切换到下标为1的窗口

然后就可以正常使用了

第二个:通过使用对应窗口的url或者tile来定位

这里封装了一个方法,遍历所有的handle,找到符合条件的handle后操作。

完整代码如下:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

wb = webdriver.Chrome()
wb.maximize_window()
wb.implicitly_wait(5)
wb.get("http://www.baidu.com")
wb.find_element(By.LINK_TEXT,"贴吧").click()
def change_window(name):
    for handle in wb.window_handles:
        wb.switch_to.window(handle)
        if name in wb.current_url:
            break
change_window("https://tieba.baidu.com/index.html")
wb.find_element(By.XPATH,'//*[@name="kw1"]').send_keys("自动化")
time.sleep(5)
wb.quit()

顺便,当框架里含有frame或者iframe的时候,也是需要切换一个层级的使用:

wb.switch_to.frame("对应的id"),如果没有对应的id,可以使用下标,八大定位法找到它之后在切换。操作完想切换回原来的位置wb.switch_to.default_content(),如果进入多层嵌套的frame想要返回到最外层wb.switch_to.parent_frame()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值