Selenium提供了定位元素的方法find_element(),該方法被定義在WebDriver類中。
一、引數
1、兩個引數,引數1根據不同定位方法確定,定位方法如下:
(1)透過id定位:使用引數By.ID定位元素的ID屬性;
(2)透過元素名定位:使用引數By.NAME定位元素的NAME屬性;
(3)透過標籤名定位:使用引數BY.TAG_NAME定位元素的TAG_NAME屬性;一般不使用該引數,使用該引數後方法會返回list,不能準確定位所找元素
(4)透過xpath定位:使用引數By.XPATH透過xpath表示式定位元素;
(5)透過css class定位:使用引數By.CLASS_NAME定位元素的class屬性;
(6)透過css選擇器定位:使用引數By.CSS_SELECTOR透過CSS選擇器定位元素;
(7)透過連結文字定位:使用引數By.LINK_TEXT定位元素
(8)透過部分連結文字定位:使用引數By.PARTIAL_LINK_TEXT定位元素
2、引數2為上述對應屬性的值
如何確定引數2:開啟網頁,選擇任意元素,比如輸入框,按鈕,右鍵單擊檢查,就會有對應屬性出現。以百度為例:
By.ID="kw"
By.NAME="wd"
By.TAG_NAME="input"
By.CLASS_NAME="s_ipt"
By.XPATH和By.CSS_SELECTOR可右鍵單擊該元素,直接複製
By.LINK_TEXT和By.PARTIAL_LINK_TEXT為頁面上任意連結文字,比如百度頁面上的"新聞","首頁"等,均可作為其值,兩者區別在於,前者為連結的全部文字,後者為連結的部分文字
二、返回值
返回一個WebElement物件,這個物件代表頁面上的一個元素
三、簡單的程式碼示例
以下是一個簡單的示例程式碼,展示如何使用find_element()方法透過各個屬性定位元素
點選檢視程式碼
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
#將各個元素定位方法封裝成一個類
class TestCase:
#初始化方法
def __init__(self):
#驅動程式開啟瀏覽器
self.driver=webdriver.Edge()
#跳轉對應網頁
self.driver.get("http://www.baidu.com")
#網頁最大化
self.driver.maximize_window()
#透過id定位元素
def test_id(self):
#網頁中定位到輸入框,輸入關鍵詞python
self.driver.find_element(By.ID,"kw").send_keys("python")
#定位到按鈕並點選搜尋
self.driver.find_element(By.ID,"su").click()
sleep(2)
quit()
#透過name定位元素
def test_name(self):
self.driver.find_element(By.NAME,"wd").send_keys("selenium")
self.driver.find_element(By.ID,"su").click()
sleep(2)
quit()
#透過xpath定位元素
def test_xpath(self):
self.driver.find_element(By.XPATH,"//*[@id='kw']").send_keys("selenium")
self.driver.find_element(By.XPATH,"//*[@id='su']").click()
sleep(2)
quit()
#透過CSS_SELECTOR定位
def test_css_selector(self):
self.driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("selenium")
self.driver.find_element(By.CSS_SELECTOR,"#su").click()
sleep(2)
quit()
#透過CSS_NAME定位元素
def test_class_name(self):
self.driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("selenium")
self.driver.find_element(By.ID,"su").click()
sleep(2)
quit()
#透過LINK_TEXT定位元素
def test_link_text(self):
#網頁中找到"貼吧"文字的連結並點選
self.driver.find_element(By.LINK_TEXT,"貼吧").click()
sleep(2)
quit()
#透過PARTIAL_LINK_TEXT定位元素
def test_partial_link_text(self):
#網頁中找到含有"AI"文字的連結並點選
self.driver.find_element(By.PARTIAL_LINK_TEXT,"AI").click()
sleep(2)
quit()
if __name__ == "__main__":
testcase = TestCase()
#testcase.test_id()
#testcase.test_name()
#testcase.test_xpath()
#testcase.test_css_selector()
#testcase.test_class_name()
#testcase.test_link_text()
testcase.test_partial_link_text()