Selenium筆記(7)常見(jiàn)的坑

本文集鏈接:http://www.itdecent.cn/nb/25338984

1. 用Xpath查找數(shù)據(jù)時(shí)無(wú)法直接獲取節(jié)點(diǎn)屬性

通常在我們使用xpath時(shí),可以使用@class的方式直接獲取節(jié)點(diǎn)的屬性,如下所示:

page.xpath('//div/a/@class')

但在Selenium中不支持這種用法,只能在找到節(jié)點(diǎn)后,使用get_attribute(name)方法來(lái)獲取屬性:

page.xpath('//div/a').get_attribute('class')

同樣的,Selenium同樣不支持Xpath中的string(),text()這類(lèi)的方法,只能獲取元素節(jié)點(diǎn)。


2. 使用了WebDriverWait以后仍然無(wú)法找到元素

有很多時(shí)候,一個(gè)簡(jiǎn)單的元素,明明也加了顯式等待,但就是找不到,代碼在仔細(xì)查看過(guò)后也沒(méi)有問(wèn)題后,多半是以下這幾種情況:

  1. 由于分辨率設(shè)置的原因,查找的元素當(dāng)前是不可見(jiàn)的。
  2. 某些頁(yè)面的元素是需要向下滾動(dòng)頁(yè)面才會(huì)加載的。
  3. 由于某些其他元素的短暫遮擋,所以無(wú)法定位到。

2.1. 分辨率原因

這時(shí)候應(yīng)該設(shè)置好分辨率,使當(dāng)前元素能夠顯示到頁(yè)面中。

2.2. 需要滾動(dòng)頁(yè)面

有些頁(yè)面為了性能的考慮,頁(yè)面下方不在當(dāng)前屏幕中的元素是不會(huì)加載的,只有當(dāng)頁(yè)面向下滾動(dòng)時(shí)才會(huì)繼續(xù)加載。

而selenium本身不提供向下滾動(dòng)的方法,所以我們需要去用JS去滾動(dòng)頁(yè)面:

driver.excute_script("window.scrollTo(0, document.body.scrollHeight)")

網(wǎng)上查到的一些滾動(dòng)方式在Chrome上無(wú)效。但這一句是有效的。

2.3. 由于其他元素的遮擋

有時(shí)候因?yàn)橐恍棾鲈氐脑颍绻€使用EC.presence_of_element_located()的話(huà),我們需要定位的元素就無(wú)法被找到,這個(gè)時(shí)候我們就應(yīng)該改變我們判斷元素的方法:

element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.XPATH, ''))
)

使用EC.visibility_of_element_located()方法可以在等待到當(dāng)前元素可見(jiàn)后,才獲取元素。

在我們找不到元素,或者跟元素?zé)o法交互時(shí),應(yīng)該多去根據(jù)當(dāng)前的情況,靈活選擇顯式等待的判斷方式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容