Message:Unable to locate element 問題解決方法


Python斷斷續續學了有一段時間了,總感覺不找個小項目練練手心里沒底,哪成想出門就遇到“攔路虎”,一個腳本剛寫完就運行報錯,還好做足了心里准備,嘗試自行解決。

或許網上有相關解決方案,不過畢竟自己親自上手實操了,有的問題還是有必要記錄下來加深印象,於是就有了這篇短文。

背景:訪問禪道首頁,通過第三方QQ賬號與密碼手動輸入登陸。

代碼:

 1 # coding:utf-8
 2 from selenium import webdriver
 3 import time
 4 
 5 driver = webdriver.Firefox()
 6 driver.get('http://www.zentao.net/ ')
 7 
 8 driver.find_element_by_link_text('登錄').click()
 9 driver.find_element_by_class_name('qq').click()
10 driver.find_element_by_css_selector('#switcher_plogin').click()
11 driver.find_element_by_id('u').send_keys('*******')
12 driver.find_element_by_id('p').send_keys('*******')
13 driver.find_element_by_id('login_button').click()
14 time.sleep(10)
15 
16 driver.quit()

學習了元素定位幾種方式,所以利用link_text 、  class_name 、  css_selector 、  id四種方式,不過執行時卻提示selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"css selector","selector":"#switcher_plogin"}

也就是說第10行代碼有問題,不能通過css_selector方式定位到"#switcher_plogin"這個元素。

雖然檢查了元素的唯一性,也嘗試通過其他如xpath 、 name等方式進行定位,但是使用運行到這塊報錯。仔細回想了之前看的示例登陸126郵箱的過程,有個iframe的方式進行定位,於是參考進行了嘗試。

不過由於對示例的沒有深入了解,照貓畫虎也出了糗。原例中查看是,相應代碼是

driver.switch_to.frame('x-URS-iframe')

於是我在開頭代碼的第9至10行插入了相同代碼,結果可想而知,依然報錯,只是提示信息變成了Unable to locate element:x-URS-iframe。

這時候再來查看禪道第三方qq登陸的地方,原來還是有區別的,於是修改相應的代碼為

driver.switch_to.frame('ptlogin_iframe')

此時再運行才正常通過。

雖然沒什么技術難度,但還得心細,了解代碼的真正含義,再去嘗試寫,不能照搬照抄。

最后附上完整代碼,為接下來的嘗試做准備~

 1 # coding:utf-8
 2 from selenium import webdriver
 3 import time
 4  
 5 driver = webdriver.Firefox()
 6 driver.get('http://www.zentao.net/ ')
 7   
 8 driver.find_element_by_link_text('登錄').click()
 9 driver.find_element_by_class_name('qq').click()
10 driver.switch_to.frame('ptlogin_iframe')                             # 通過frame方式定位
11 driver.find_element_by_css_selector('#switcher_plogin').click()
12 driver.find_element_by_id('u').send_keys('*******')
13 driver.find_element_by_id('p').send_keys('*******')
14 driver.find_element_by_id('login_button').click()
15 time.sleep(10)
16 
17 driver.quit()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM