遇到iframe表單嵌套頁面時,webdriver無法直接定位其中的元素,需要轉換到內嵌的頁面中后,再進行元素定位
例如:做一個頁面,將百度首頁嵌套進去
1 <html> 2 <hody> 3 <iframe id="iff" src="http://www.baidu.com" width="1000" height="800"></iframe> 4 </hody> 5 </html>
頁面效果如下:
直接定位百度的輸入框會報錯:找不到元素。可以先跳轉到百度頁面后,再定位,如下:
switch_to.frame()
1 from selenium import webdriver 2 import time 3 4 driver = webdriver.Chrome() 5 driver.get('D:\\python\\aaa.html') 6 7 driver.switch_to.frame('iff') # 先跳轉到內層頁面(默認使用表單的id或name屬性) 8 driver.find_element_by_id('kw').send_keys('zhangyang') # 再進行元素定位 9 driver.find_element_by_id('su').click() 10 11 time.sleep(2) 12 driver.quit()
如果iframe沒有可用的id或name屬性,可以先通過元素定位方法定位到iframe元素,再講iframe元素傳遞給switch進行跳轉,如下:
1 element_iframe = driver.find_element_by_id('iff') # 通過元素定位方法先找到iframe元素 2 driver.switch_to.frame(element_iframe) # 將元素傳遞進去
可以使用如下方法跳出表單:
1 driver.switch_to.parent_frame() # 跳出當前表單 2 driver.switch_to.default_content() # 跳到最外層頁面
ps:
mac上,打開本地文件
file_path = 'file://' + os.path.abspath('a1.html') driver.get(file_path) print(file_path) # 打印:file:///Users/zhangyang/PycharmProjects/testUI/a1.html