Selenium 元素定位及操作
作者:Ss肥魚(yú)
前端比較常見(jiàn)的定位元素的方式是依據(jù)id、className樣式名稱和tag標(biāo)簽類型查找,我就比較喜歡用xpath作為查找方式。
前言
# 啟動(dòng)Chrome瀏覽器,前文有流程
driver = webdriver.Chrome(service=service, options=chrome_options)
我們接下來(lái)的操作都是對(duì)driver的編輯,它相當(dāng)于是一個(gè)可以跟程序交互的谷歌瀏覽器。
查找元素
前端比較常見(jiàn)的定位元素的方式是依據(jù)id、className樣式名稱和tag標(biāo)簽類型查找;我就比較喜歡用xpath作為查找方式,上文已經(jīng)提到過(guò),就不再展開(kāi)了
driver.find_element(By.ID, 'id')
driver.find_element(By.CLASS_NAME, 'class')
driver.find_element(By.TAG_NAME, 'span')
driver.find_element(By.XPATH, 'xpath')
操作元素
selenium有很多自帶的操作方法:
driver.find_element(By.XPATH, 'xpath').send_keys('肥魚(yú)') # 比如給input鍵入文本
driver.find_element(By.XPATH, 'xpath').get_attribute('value') # 獲取value屬性中的值
driver.find_element(By.XPATH, 'xpath').text # 獲取標(biāo)簽中的文本比如<span>肥魚(yú)</span>
driver.find_element(By.XPATH, 'xpath').click() # 點(diǎn)擊按鈕
不過(guò)終極操作還是使用js:
text = '肥魚(yú)'
btn = driver.find_element(By.XPATH, 'xpath')
driver.execute_script(f'arguments[0].value="{text}"', btn) # 鍵入文本
driver.execute_script('arguments[0].click();', btn) # 點(diǎn)擊按鈕
模擬登陸
下面的demo是有時(shí)效性的,發(fā)文做過(guò)測(cè)試是ok的,在CSDN之前寫的就??網(wǎng)站都沒(méi)了測(cè)個(gè)啥!
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
if __name__ == '__main__':
print('==========開(kāi)始咯==========')
# 設(shè)置ChromeDriver路徑
chrome_driver_path = r'C:\Users\ws\Desktop\chrome-win64\chromedriver.exe'
# 設(shè)置Chrome瀏覽器路徑
chrome_browser_path = r'C:\Users\ws\Desktop\chrome-win64\chrome.exe'
chrome_options = Options()
chrome_options.binary_location = chrome_browser_path
# 創(chuàng)建Service對(duì)象
service = Service(chrome_driver_path)
# 啟動(dòng)Chrome瀏覽器
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get('https://cmdparkour.github.io/vue-admin-box/dist/#/login')
# 顯性等待
WebDriverWait(driver, 10).until(
# 等待登陸按鈕出現(xiàn)
lambda _: driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div/div[2]/form/button')
)
try:
# 輸入賬號(hào)
account = driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div/div[2]/form/div[1]/div[2]/input')
# 清空
account.clear()
# 輸入密碼
password = driver.find_element(By.XPATH, '/html/body/div[1]/div/div/div/div[2]/form/div[2]/div[2]/input')
# 清空
password.clear()
sleep(5)
# 鍵入
account.send_keys('admin')
# 鍵入
password.send_keys('123456')
# 點(diǎn)擊登陸
confirm_btn = driver.find_element(By.XPATH,
'/html/body/div[1]/div/div/div/div[2]/form/button')
driver.execute_script('arguments[0].click();', confirm_btn)
sleep(20)
except Exception as e:
print('Exception:', e)
finally:
driver.close()
print('==========結(jié)束咯==========')
責(zé)任編輯:趙寧寧
來(lái)源:
Ssoul肥魚(yú)