前言
记录在使用selenimu对嵌套的iframe进行定位时遇到的坑
一、嵌套代码片段
<div id="frame_list">
<iframe id="home" tagname="home" style="display: none;" src="/app/common/start2018.aspx" frameborder="no"></iframe>
<div id="frame-mask" style="display: none;"></div>
<iframe src="app/item/item_sku/item_sku.aspx" style="display: inline-block;" frameborder="no">
<div class="plb full" id="frame_p" style="width: 100%;">
<iframe id="itemsku" class="full" style="width:100%;" src="/app/item/item_sku/item_sku.aspx?frame=true&checkwms=false&owner_co_id=10408319&authorize_co_id=10408319">
</iframe>
</div>
</iframe>
</div>
二、selenium之如何定位多层iframe嵌套中的元素?
# 首先定位到frame_list下的第二个iframe
frame_name = bro.find_element(By.XPATH, '//*[@id="frame_list"]/iframe[2]')
# 切换到该iframe上
bro.switch_to.frame(frame_name)
# 继续定位到第二个iframe的子iframe上
frame_name1 = bro.find_element(By.XPATH, '//div[@id="frame_p"]/iframe')
# 再次切换即可
bro.switch_to.frame(frame_name1)
总结
对于这种嵌套的iframe,直接一次定位似乎定位不到,像下面这样就没有成功。
frame_name = bro.find_element(By.XPATH, '//*[@id="frame_list"]/iframe[2]//iframe[@id="itemsku"]')