Selenium实现元素定位

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()