当出现多窗口的时候元素定位不生效,提示找不到对应的元素。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()