欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+Selenium定位不到元素常見原因及解決辦法(報:NoSuchElementException)

 更新時間:2021年03月21日 09:18:03   作者:瘋子vs年華  
這篇文章主要介紹了Python+Selenium定位不到元素常見原因及解決辦法(報:NoSuchElementException),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在做web應(yīng)用的自動化測試時,定位元素是必不可少的,這個過程經(jīng)常會碰到定位不到元素的情況(報selenium.common.exceptions.NoSuchElementException),一般可以從以下幾個方面著手解決:

1.Frame/Iframe原因定位不到元素:

這個是最常見的原因,首先要理解下frame的實質(zhì),frame中實際上是嵌入了另一個頁面,而webdriver每次只能在一個頁面識別,因此需要先定位到相應(yīng)的frame,對那個頁面里的元素進行定位。

解決方案:

如果iframe有name或id的話,直接使用switch_to_frame("name值")或switch_to_frame("id值")。如下:

driver=webdriver.Firefox()
driver.get(r'http://www.126.com/')
driver.switch_to_frame('x-URS-iframe') #需先跳轉(zhuǎn)到iframe框架
username=driver.find_element_by_name('email')
username.clear()

如果iframe沒有name或id的話,則可以通過下面的方式定位:

#先定位到iframe
elementi= driver.find_element_by_class_name('APP-editor-iframe')
#再將定位對象傳給switch_to_frame()方法
driver.switch_to_frame(elementi) 

如果完成操作后,可以通過switch_to.parent_content()方法跳出當(dāng)前iframe,或者還可以通過switch_to.default_content()方法跳回最外層的頁面。

2.Xpath描述錯誤原因:

由于Xpath層級太復(fù)雜,容易犯錯。但是該定位方式能夠有效定位絕大部分的元素,建議掌握。

解決方案:

2.1可以使用Firefox的firePath,復(fù)制xpath路徑。該方式容易因為層級改變而需要重新編寫過xpath路徑,不建議使用,初學(xué)者可以先復(fù)制路徑,然后嘗試去修改它。

2.2提高下寫xpath的水平。

可以詳看筆者另外一篇博文總結(jié):Selenuim+Python之元素定位總結(jié)及實例說明
該博文詳細總結(jié)了Xpath的使用,多組合定位一般都能實現(xiàn)定位問題。

如何檢驗編寫的Xpath是否正確?編寫好Xpath路徑,可以直接復(fù)制到搜狐瀏覽器的firebug查看html源碼,通過Xpath搜索:如下紅色框,若無報錯,則說明編寫的Xpath路徑?jīng)]錯。

find_element_by_xpath("http://input[@id='kw']")

3.頁面還沒有加載出來,就對頁面上的元素進行的操作:

這種情況一般說來,可以設(shè)置等待,等待頁面顯示之后再操作,這與人手工操作的原理一樣:
3.1設(shè)置等待時間;缺點是需要設(shè)置較長的等待時間,案例多了測試就很慢;
3.2設(shè)置等待頁面的某個元素出現(xiàn),比如一個文本、一個輸入框都可以,一旦指定的元素出現(xiàn),就可以做操作。
3.3在調(diào)試的過程中可以把頁面的html代碼打印出來,以便分析。

解決方案:
導(dǎo)入時間模塊。

import time
time.sleep(3)

4.動態(tài)id定位不到元素:

解決方案:
如果發(fā)現(xiàn)是動態(tài)id,直接用xpath定位或其他方式定位。

5.二次定位,如彈出框登錄

如百度登錄彈出框登錄百度賬號,需先定位到百度彈出框,然后再定位到用戶名密碼登錄。

# coding=utf-8
'''
Created on 2016-7-20
@author: Jennifer
Project:登錄百度賬號
'''
from selenium import webdriver
import time

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 in element0:
  if ele0.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 "登錄名" in driver.page_source
except AssertionError:
  print "登錄失敗"
else:
  print "登錄成功"
  time.sleep(3)
finally:
  print "測試記錄:已測試"
driver.close()

補充:報:selenium.common.exceptions.ElementNotVisibleException

代碼:

from selenium import webdriver
from PIL import Image
import time
import pandas as pd
import datetime
 
driver = webdriver.Ie(r"C:\Program Files\internet explorer\IEDriverServer2.exe")
driver.get("https://www.cib.com.cn/cn/minipage/page/login-firmalert.html")
print("請輸入用戶名和帳號密碼,實現(xiàn)登錄")
input("====按任意鍵繼續(xù)====")
 
# print(driver.current_url) # https://corporatebank.cib.com.cn/firm/main/mainx.do
 
frame = driver.find_element_by_id("workframe") # 切換到 iframe 標(biāo)簽中查找
driver.switch_to_frame(frame) # 切入 iframe 標(biāo)簽
 
# driver.switch_to_default_content()  # 切出 iframe 標(biāo)簽 也可以 直接 默認的
 
driver.find_element_by_xpath('//div[@id="fast-way"]/ul/li[2]/a').click() # 點擊 當(dāng)日明細查詢按鈕
time.sleep(2)
try:
  driver.find_element_by_xpath('//div[@id="fast-way"]/ul/li[2]/a').click() # 點擊 當(dāng)日明細查詢按鈕
except Exception as e:
  print("=======雙擊這個按鈕========", e)
time.sleep(3)

到此這篇關(guān)于Python+Selenium定位不到元素常見原因及解決辦法(報:NoSuchElementException)的文章就介紹到這了,更多相關(guān)Python+Selenium定位不到元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中l(wèi)ist列表的一些進階使用方法介紹

    Python中l(wèi)ist列表的一些進階使用方法介紹

    這篇文章主要介紹了Python中l(wèi)ist列表的一些進階使用方法介紹,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • Python技巧之實現(xiàn)批量統(tǒng)一圖片格式和尺寸

    Python技巧之實現(xiàn)批量統(tǒng)一圖片格式和尺寸

    大家在工作的時候基本都會接觸到很多的圖片,有時為了不同的工作需求需要修改圖片的尺寸或者大小。本文為大家整理了Python批量轉(zhuǎn)換圖片格式和統(tǒng)一圖片尺寸,希望對大家有所幫助
    2023-05-05
  • 極簡Python庫CherryPy構(gòu)建高性能Web應(yīng)用實例探索

    極簡Python庫CherryPy構(gòu)建高性能Web應(yīng)用實例探索

    今天為大家介紹的是 CherryPy,它是一個極簡、穩(wěn)定且功能強大的Web框架,可以幫助開發(fā)者快速構(gòu)建高性能的 Web 應(yīng)用程序,使用 CherryPy,你可以輕松地創(chuàng)建RESTful API、靜態(tài)網(wǎng)站、異步任務(wù)和 WebSocket 等應(yīng)用
    2024-01-01
  • Python優(yōu)化技巧之利用ctypes提高執(zhí)行速度

    Python優(yōu)化技巧之利用ctypes提高執(zhí)行速度

    ctypes是Python的一個外部庫,提供和C語言兼容的數(shù)據(jù)類型,可以很方便地調(diào)用C DLL中的函數(shù)。今天我們就來詳細探討下ctypes庫的使用技巧
    2016-09-09
  • 在Python中使用zlib模塊進行數(shù)據(jù)壓縮的教程

    在Python中使用zlib模塊進行數(shù)據(jù)壓縮的教程

    這篇文章主要介紹了在Python中使用zlib模塊進行數(shù)據(jù)壓縮的教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-06-06
  • Python實現(xiàn)設(shè)置windows桌面壁紙代碼分享

    Python實現(xiàn)設(shè)置windows桌面壁紙代碼分享

    這篇文章主要介紹了Python實現(xiàn)設(shè)置windows桌面壁紙,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-03-03
  • python使用配置文件過程詳解

    python使用配置文件過程詳解

    這篇文章主要介紹了python使用配置文件過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Python Charles抓包配置實現(xiàn)流程圖解

    Python Charles抓包配置實現(xiàn)流程圖解

    這篇文章主要介紹了Python Charles抓包實現(xiàn)流程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Python 圖像處理 Pillow 庫詳情

    Python 圖像處理 Pillow 庫詳情

    這篇文章主要介紹了Python 圖像處理 Pillow 庫,圖像處理是常用的技術(shù),python 擁有豐富的第三方擴展庫,Pillow 是 Python3 最常用的圖像處理庫,目前最高版本5.2.0。Python2 使用Pil庫,兩者是使用方法差不多,區(qū)別在于類的引用不同。下面來看看文章的詳細內(nèi)容
    2021-11-11
  • python環(huán)形單鏈表的約瑟夫問題詳解

    python環(huán)形單鏈表的約瑟夫問題詳解

    這篇文章主要為大家詳細介紹了python環(huán)形單鏈表的約瑟夫問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評論