八大定位
今天我们来学一学,selenium有名的八大定位方式;都有哪八个呢,下面我先列出来;之后再一个一个的实践
- id,通过id定位元素
- name,通过name定位
- class_name,通过class类名定位
- tag_name,通过标签名称
- link_text,通过链接文本
- partial_link_text,通过部分链接文本
- xpath,通过xpth定位元素
- css_selector,通过css选择器
以上就是著名的八大定位,下面就让我们一个一个的看,具体是怎么个一回事
ID
最快速、可靠的定位方式;当元素有唯一id时候- from selenium import webdriver
- from selenium.webdriver.chrome.service import Service
- from selenium.webdriver.common.by import By
- # broswer = webdriver.Chrome()
- serve_path = r'D:\Code_Study\driver\chromedriver-win64\chromedriver.exe'
- service = Service(serve_path)
- browser = webdriver.Chrome(service=service)
- # 访问网站
- browser.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html')
- # + id,通过id定位元素,可以看到是一个输入框
- element = browser.find_element(By.ID, 'lname')
- element.send_keys('selenium')
- time.sleep(5)
- print(element.tag_name) # input
复制代码 name
- element = browser.find_element(By.NAME, 'wd')
- element.send_keys('selenium')
- time.sleep(5)
- print(element.tag_name) # input
复制代码 class_name
适合通过class名定位,但是需要注意class不是唯一的,可能会有多个- # 先通过name定位输入框,输入东西后;点击百度首页按钮
- element = browser.find_element(By.NAME, 'wd')
- element.send_keys('selenium')
- time.sleep(5)
- element = browser.find_element(By.CLASS_NAME, 'toindex')
- element.click()
- time.sleep(5)
复制代码 tag_name
通过HTML的标签名定位,一般需要结合其他条件- # 可以看到先通过定位左上角的id;后面再使用find_elements;找到a标签的列表集合
- # 最后再循环遍历出来,每一个标签的href链接
- # 注意:find_elements只有当找到的元素多个的时候,才可以使用;
- # 可以直接后面加下标使用;前提是要知道所在位置
- elements = browser.find_element(By.ID, 's-top-left').find_elements(By.TAG_NAME, 'a')
- for element in elements:
- print(element.get_attribute('href'))
- time.sleep(5)
复制代码 link_text
用于定位超链接文本(完全匹配)- # 可以看到,点击了新闻的跳转
- element = (browser.find_element(By.LINK_TEXT, '新闻')
- .click())
- time.sleep(5)
复制代码 partial_link_text
超链接文本的部分匹配- # 可以看到,跳转到了hao123页面
- element = (browser.find_element(By.PARTIAL_LINK_TEXT, 'hao')
- .click())
- time.sleep(5)
复制代码 xpath
最灵活的定位方式,适合复杂场景;xpath的内容,后面会单独讲一篇文章了;- element = browser.find_element(By.XPATH, '//*[@id="kw"]')
- element.send_keys('selenium')
- time.sleep(5)
- print(element.tag_name) # input
复制代码 css_selector
通过css选择器来进行定位,常用的有以下几种
- #kw;意思是使用了id选择器
- .toindex;意思是class选择器
- input[name="wd"];属性选择器;意思是选择name="wd"的input标签
- # #kw;可以看到,也是定位到了输入框
- # element = browser.find_element(By.CSS_SELECTOR, '#kw')
- # element = browser.find_element(By.CSS_SELECTOR, '.s_ipt')
- # element = browser.find_element(By.CSS_SELECTOR, 'input[name="wd"]')
- element.send_keys('selenium')
- time.sleep(5)
- print(element.tag_name) # input
复制代码 好了,八大定位都实践完毕了;但是其中出现了一些新的知识点;比如xpath,它的内容都需要单独讲一下
还有下面这个有没有s的区别
find_element和find_elements的区别详解
在 Selenium 中,find_element 和 find_elements 是两种主要的元素定位方法,它们有以下关键区别:
核心区别对比
特性find_elementfind_elements返回值类型返回单个 WebElement 对象返回 WebElement 对象的列表未找到元素时行为抛出 NoSuchElementException 异常返回空列表 []使用场景确定唯一存在的元素查找多个相同特征的元素方法后缀单数形式 (element)复数形式 (elements)何时使用哪种方法?
使用 find_element 当:
- 你确定页面上只有一个匹配元素
- 元素是唯一标识的(如通过ID)
- 如果元素不存在应该立即报错
使用 find_elements 当:
- 需要获取多个相似元素(如所有表格行、所有图片)
- 需要检查元素是否存在而不引发异常
- 处理动态内容时更安全
八大定位讲完了,下一篇就讲一下Element的常见属性和方法
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |