在Selenium中可以通过多种方式来定位标签,返回标签元素对象 ,Selenium提供了下面的方法进行元素定位:
find_element_by_id (返回一个元素)
find_element(s)_by_class_name (根据类名获取元素列表)
find_element(s)_by_name (根据标签的name属性值返回包含标签对象元素的列表)
find_element(s)_by_xpath (返回一个包含元素的列表)
find_element(s)_by_link_text (根据连接文本获取元素列表)
find_element(s)_by_partial_link_text (根据链接包含的文本获取元素列表)
find_element(s)_by_tag_name (根据标签名获取元素列表)
find_element(s)_by_css_selector (根据css选择器来获取元素列表)
提示:elements是寻找多个元素会返回一个
list
除了上面这些公有的方法,我们还有2个私有的方法来帮助页页面对象的定位。
这两个方法就是find_element(by=By.CLASS_NAME, value=name)和find_elements(by=By.CLASS_NAME, value=name)
(新版的Python已经不支持公有的方法,需要写成私有的方法来定位 ):
在使用
find_element
和
find_elements时,我们需要先导入
from selenium.webdriver.common.by import By
借助 By 来传入定位方式,需要先引入,主要是为了防止定位方式写错。
一、通过id定位
如果你知道元素的
id
属性,那么就使用
id
定位吧。在
id
定位里,会返回第一个
id
属性匹配的元素,如果没有元素匹配,会抛出
NoSuchElementException
异常。
driver.find_element(By.ID, 'value')
# value为标签元素
示例:
通过百度搜索框标签,进行定位输入
搜索框的id为‘kw’
driver.find_element(By.ID, 'kw')
二、通过name定位
如果你知道元素的
name
属性,那么就用这个定位吧。在
name
定位里,会返回第一个
name
属性匹配的元素,如果没有元素匹配,会抛出
NoSuchElementException
异常。
driver.find_element(By.NAME,'value')
示例:
如上图,百度搜索框的name是‘wd‘
driver.find_element(By.NAME,'wd')
三、通过xpath定位
driver.find_element(By.XPATH, 'value')
示例
百度百度搜索框的xpath是’//*[@id="kw"]‘
driver.find_element(By.XPATH, '//*[@id="kw"]')
四、通过链接文本定义超链接定位
如果你知道一个锚标签使用了什么文本,那么就使用这种方法。在超链接定位里,会返回第一个文本属性匹配的链接,如果没有元素匹配,会抛出
NoSuchElementException
异常。
driver.find_element(By.LINK_TEXT,'value')
driver.find_element(By.PARTIAL_LINK_TEXT, 'value')
示例:
已有HTML代码
<html>
<body>
<p>Are you sure you want to do this?</p>
<a href="continue.html">Continue</a>
<a href="cancel.html">Cancel</a>
</body>
<html>
可以这样定位
continue.html
链接:
driver.find_element(By.LINK_TEXT,'Continue')
driver.find_element(By.PARTIAL_LINK_TEXT, 'Conti')
五、通过标签名定位
知道元素标签名就使用这个定位,如果没有元素匹配,会抛出
NoSuchElementException
异常。
driver.find_element(By.TAG_NAME,'value')
示例:
<html>
<body>
<h1>Welcome</h1>
<p>Site content goes here.</p>
</body>
<html>
可以这样定位
h1
元素:
driver.find_element(By.TAG_NAME,'h1')
六、通过css定位
知道
class
就使用这个定位,只返回匹配的第一个,无元素匹配,会抛出
NoSuchElementException
异常
driver.find_element(By.CLASS_NAME,'value')
示例:
用class定位百度搜索框
driver.find_element(By.CLASS_NAME, 's_ipt')
版权归原作者 __Samual 所有, 如有侵权,请联系我们删除。