Selenium實現元素定位

jongjongjong發表於2024-08-25

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:開啟網頁,選擇任意元素,比如輸入框,按鈕,右鍵單擊檢查,就會有對應屬性出現。以百度為例:


image


image


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為頁面上任意連結文字,比如百度頁面上的"新聞","首頁"等,均可作為其值,兩者區別在於,前者為連結的全部文字,後者為連結的部分文字


image


二、返回值

返回一個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()

相關文章