基于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')