一、問題描述
筆者最近在寫自動化登錄的case時,有一個破解滑動驗證碼的過程,但是在定位滑動驗證碼上的元素時,總是提示定位不到對應元素,報錯如下:
Unable to locate element: {"method":"xpath","selector":"//div[@class='show-code']/input"}
剛開時還以為定位方式不對,試了xpath定位,id/name定位,但是還是會報錯;后面想是不是網絡延遲問題導致的,所以在定位前加了延遲time.sleep(),
但是試了下不管家多久延遲還是有問題;后面想了下最大的原因可能是,頁面沒有跳轉到這個驗證碼彈框頁面上面來,后面仔細看了下頁面代碼,發現驗證碼彈框時一個frame框架,而frame中實際上是嵌入了另一個頁面,而webdriver每次只能在一個頁面識別,因此需要先定位到相應的frame,對那個頁面里的元素進行定位。這個問題也是讓我頭疼了好久,最終還是解決了,開心。
二、解決方案
在定位驗證碼彈框上面的元素時,先跳轉到frame框架,具體代碼如下:
注意:如果網速不夠快,最好加個延遲時間。
# 先跳到iframe框架
time.sleep(2)
driver.switch_to_frame('tcaptcha_iframe')
# 定位需要滑動的元素
time.sleep(1)
source = driver.find_element_by_xpath("//div[@id='tcaptcha_drag_thumb']")