背景:組內(nèi)同事最近在寫腳本,使用復(fù)制的xpath始終定位不到元素,報(bào)錯(cuò)內(nèi)容:selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":"http://table[text()='contentTable']/tbody/tr/td[16]/a[2]/i"}
解題思路:
1. 由于提供的html截圖信息,發(fā)現(xiàn)存在多層body消息體拼接成一個(gè)html頁面的情況,所以推薦使用模糊查詢的xpath定位元素,也就有了這個(gè)xpath:"http://table[text()='contentTable']/tbody/tr/td[16]/a[2]/i"【如果不清楚模糊查詢xpath怎么寫,可以在評(píng)論區(qū)提問】
改了后,不好用,還是報(bào)錯(cuò)。
2. 是不是等待沒加?
不是,等待了10秒,肯定能夠加載
3. 當(dāng)前元素父節(jié)點(diǎn),是否存在iframe?:存在?。?!
如果父節(jié)點(diǎn)存在圖上這種iframe消息體就需要先跳轉(zhuǎn)到iframe,才能夠定位到元素:
跳轉(zhuǎn)方式有很多,這里推薦使用:driver.switch_to.frame(0)
后面的0代表跳轉(zhuǎn)到第一個(gè)iframe,如果頁面有多個(gè)iframe,需要看看這個(gè)元素所在iframe是第幾個(gè),如果是第二個(gè),就修改成1
問題解決。
問題升級(jí):
就是這個(gè)頁面,在進(jìn)行后續(xù)操作的時(shí)候,又報(bào)錯(cuò)了,還是一樣的!
也是一番錯(cuò)誤的定位,最終定位到了這個(gè)html結(jié)構(gòu)
通過這個(gè)html結(jié)構(gòu)發(fā)現(xiàn),需要定位的元素,不在iframe窗口下。如果之前已經(jīng)跳轉(zhuǎn)到了iframe,之后定位的元素也只能夠定位到iframe窗口下的元素了。
這時(shí):需要跳出之前進(jìn)入的iframe頁面:?driver.switch_to.default_content()
總結(jié):
1. 如果父節(jié)點(diǎn)存在iframe,需要先跳轉(zhuǎn)到iframe才能夠定位到元素
2. 如果之前跳轉(zhuǎn)過iframe,當(dāng)需要定位不在同iframe的腳本,需要先跳出之前的iframe窗口,才能夠繼續(xù)定位文章來源:http://www.zghlxwxcb.cn/news/detail-441260.html
3. 定位不到元素的原因,可以優(yōu)先考慮iframe~文章來源地址http://www.zghlxwxcb.cn/news/detail-441260.html
到了這里,關(guān)于Python_selenium: 元素定位不到的罪魁禍?zhǔn)字唬篿frame的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!