微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

基于selenium的元素定位

基于selenium的元素定位方法

通过id定位

通常来讲,一个网页的id和name都是唯一的,所以元素具有id和name属性,那么可以直接使用id和name进行定位。
driver.find_element(By.ID, 'kw')
或者
driver.find_element_by_id('kw') ,这个方法实际就是调用的find_element实现的

通过name定位

name也通常具有唯一性

通过XPATH定位

xpath可以用于selenium和appium进行元素定位,比较万能;但有一个缺点是,xpath定位比css selector定位速度要慢很多,因为xpath是针对所有元素从头到尾的一点点遍历
xpath的常用语法(表达式):
1、//*[@id='kw']     在所有元素中查找id值为kw的元素,查找其他属性的话直接按格式替换掉id和对应的值就可以
   其中 //*代表所有元素,
2、/div/a    查找div下所有子元素a(注意这里仅仅是子元素,不包括子元素的子元素)
   /div/a[1]   如果查找到的子元素a不是唯一,那么可以使用a[1]表示获取一个子元素a
   /div/a[last()]   表示获取最后一个子元素a
   /div/a[last()-1]   
3、/div//a   注意这里的变成了‘//’,表示查找div下的所有子孙元素a,包括子元素的子元素,区分子元素和子孙元素
4、/    表示从跟节点获取
   //  表示从任何节点选取,而不考虑他们的位置
   .  表示选取当前节点
   ..  表示选取当前节点的父节点
   @  表示选取属性
xpath定位的python代码:
以百度首页举例
driver.find_element(By.XPATH, ‘//*[@id="kw"]’)
或者
driver.find_element_by_xpath(‘//*[@id="kw"]’)
xpath定位技巧小结:可以使用谷歌浏览器,鼠标浮动到想要定位的元素上,点击右键,选择‘检查’选项,进入调试页面,在elements标签页会直接该元素的网页代码,可以先找到该具有id或者name属性的上级节点,然后再逐级或者跨级进行元素定位

通过css selector定位

css比xpath要快,使用的是样式定位
常用css selector语法:
.       .c-tips-container    表示选择class=“c-tips-container”的所有元素
#     #kw     表示选择id="kw"的所有元素
*                表示选择所有元素
element      p        表示选择所有<p>元素
element,element   div,p   表示所有的div和p元素
element element    div p   表示div元素内部所有的p元素,相当于xpath的//
element>element   div>p   表示父元素为div元素的所有p元素,相当于xpaht的/
element+element   div+p   表示紧接在div元素之后的所有p元素
[atrribute]     [target]     表示选择带有target属性的所有元素
[atrribute=value]    [targe=_blank]   表示选择target=“_blank”的所有元素
:nth-child(n)    p:nth-child(2)   表示选择属于父元素的第二个子元素p
css selector定位的python代码:
driver.find_element(By.CSS_SELECTOR, ‘#kw’)
或者
self.driver.find_element_by_css_selector('#kw')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐