1、元素等待
大多數的 Web 應用程式都是使用 AJAX 和 Javascript 開發的,加載時都有加載順序,可能打開了網頁但是元素并未加載出來,這個時候就定位不到元素了,就會報錯,所以,我們需要等到元素被加載出來后再去進行定位等操作,
1.1 強制等待
如果元素已經出現還是要繼續等待,直到超時,會浪費很多的時間,不建議使用,
import time
time.sleep(5) # 固定休眠5秒
1.2 隱式等待
創建driver時,為瀏覽器物件創建一個等待時間,整個 driver 的會話周期內設定一次即可,需要等待整個頁面加載完成才會行下一步,可能頁面加載未完成的時候,需要定位的元素已經加載完成了,但因為某些JS檔案、圖片未加載完成,不能執行下一步,增加了不必要的等待時間,
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://localhost:63342/webtest/demo.html")
driver.implicitly_wait(10)
driver.quit()
1.3 顯示等待
顯示等待只對某個元素生效,無需等待頁面加載完成,節省了加載時間,
等到某個條件滿足后,再執行操作(程式每隔 x 秒查詢一次,若條件成立則執行下一步,否則繼續等待,超過設定的最長時間條件仍不成立則拋出 TimeoutException)
WebDriverWait 顯示等待類:
WebDriverWait(driver, timeout,
poll_frequency=0.5,
ignored_exceptions=None):
·driver:瀏覽器驅動
·timeout:最長超時時間,默認以秒為單位
·poll_frequency:檢測的間隔(步長)時間,默認為0.5S
·ignored_exceptions:超時后的例外資訊,默認情況下拋NoSuchElementException例外
WebDriverWait 一般和 until()、until_not() 方法配合使用:
·until:直到條件成立
·until_not:直到條件不成立
expected_condition 模塊提供了希望發生的條件,如 presence_of_element_located 元素存在、visibility_of_element_located 元素可見、element_to_be_clickable 元素可點擊,常用操作如下:
示例代碼:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
driver.find_element(By.ID, "kw").send_keys("test")
2、元素基本操作
2.1 點擊
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
ele = driver.find_element(By.ID, "kw").send_keys("test")
# 點擊
driver.find_element(By.ID, "su").click()
driver.quit()
2.2 輸入/清空文本
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
ele = driver.find_element(By.ID, "kw")
# 輸入文本
ele.send_keys("test")
sleep(1)
# 清空輸入框文本
ele.clear()
driver.quit()
2.3 獲取元素尺寸、坐標
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
ele = driver.find_element(By.LINK_TEXT, "新聞")
print(ele.size) # 獲取元素寬高
print(ele.location) # 獲取元素x,y坐標值
print(ele.rect) # 獲取元素寬高、xy坐標值driver.quit()
2.4 獲取元素標簽文本
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
ele = driver.find_element(By.LINK_TEXT, "新聞")
# 獲取元素 text 屬性
print(ele.text)
driver.quit()
2.5 獲取元素屬性
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
ele = driver.find_element(By.LINK_TEXT, "新聞")
print(ele.get_attribute("href"))
ele =
driver.find_element_by_tag_name("html")
# 獲取元素標簽的內容
# print(ele.get_attribute('textContent'))
# # 獲取元素內的全部HTML
# print(ele.get_attribute('innerHTML'))
# 獲取包含選中元素的HTML
print(ele.get_attribute('outerHTML'))
driver.quit()
2.6 檢查元素是否可見、可點擊等
ele.is_displayed()
ele.is_enabled()
ele.is_selected()
2.7 獲取元素標簽型別
ele.tag_name
2.8 表單提交
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
ele = driver.find_element_by_id('kw')
ele.send_keys('test')
ele.submit()# 提交表單,可以模擬在搜索框輸入文字后回車的操作
driver.quit()
2.9 指定元素截圖
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
ele = driver.find_element_by_link_text("新聞")
ele.screenshot("test.png") # 截圖
driver.quit()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/247308.html
標籤:其他
上一篇:linux安裝Jenkins
下一篇:有贊的深度需求功能測驗
