python xpath定位不到_Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)...
#coding=utf-8
'''Created on 2016-7-20
@author: Jennifer
Project:登錄百度賬號
'''
from selenium importwebdriver
importtime
driver =webdriver.Firefox()
driver.get("http://www.baidu.com/")
time.sleep(3)
#點擊登錄:有些name為tj_login的元素為不可見的,點擊可見的那個登錄按鈕即可。#否則會報:ElementNotVisibleException
element0=driver.find_elements_by_name("tj_login")
for ele0 inelement0:
ifele0.is_displayed():
ele0.click()
#在登錄彈出框,需先定位到登錄彈出框#否則會報:NoSuchElementException
element1=driver.find_element_by_class_name("tang-content")
element11=element1.find_element_by_id("TANGRAM__PSP_8__userName")
element11.clear()
element11.send_keys("登錄名")
element2=element1.find_element_by_id("TANGRAM__PSP_8__password")
element2.clear()
element2.send_keys("密碼")
element3=element1.find_element_by_id("TANGRAM__PSP_8__submit")
element3.click()
element3.submit()
try:
assert "登錄名" indriver.page_source
exceptAssertionError:
print "登錄失敗"
else:
print "登錄成功"time.sleep(3)
finally:
print "測試記錄:已測試"driver.close()
6.不可見元素定位
如上百度登錄代碼,通過名稱為tj_login查找的登錄元素,有些是不可見的,所以加一個循環判斷,找到可見元素(is_displayed())點擊登錄即可。
出錯: NoSuchElementException: Message: Unable to locate element
出錯原因
1.可能元素加載未完成
元素加載沒完成,同樣的路徑定位,每次測試結果確是不一樣的,有時候拋出錯誤,有時候正常!這就比較蛋疼了,也就是說,和你的定位方法半毛錢關系沒有,而很大程度上取決于你的電腦和網速!
1.解決方案A:添加兩行代碼
wait = ui.WebDriverWait(driver,10)
wait.until(lambda driver: driver.find_element_by_方法("定位路徑自己來"))
WebDriverWait(driver,10)的意思是;10秒內每隔500毫秒掃描1次頁面變化,當出現指定的元素后結束。driver是前面操作webdriver.firefox()的句柄
完整的小段代碼是:
from selenium import webdriver
import selenium.webdriver.support.ui as ui
driver_item=webdriver.Firefox()
url="https://movie.douban.com/"
wait = ui.WebDriverWait(driver_item,10)
driver_item.get(url)
wait.until(lambda driver: driver.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div/div/label[5]"))
driver_item.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div/div/label[5]").click()
1.解決方案B:使用while+try…except結合
下面來個例子,完整的可運行代碼如下:
from selenium import webdriver
import time
import os
driver_item=webdriver.Firefox()
url="https://movie.douban.com/"
driver_item.get(url)
while 1:
start = time.clock()
try:
driver_item.find_element_by_xpath("//div[@class='fliter-wp']/div/form/div/div/label[5]").click()
print '已定位到元素'
end=time.clock()
break
except:
print "還未定位到元素!"
print '定位耗費時間:'+str(end-start)
運行結果如下:
還未定位到元素!
已定位到元素
定位耗費時間:0.262649990301
總結
以上是生活随笔為你收集整理的python xpath定位不到_Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql isam 食物_MySQL常
- 下一篇: python +appium实现原理_p