Selenium常用定位元素的方法:
1、id定位,id是唯一标识:
find_element_by_id('kw') #百度首页的输入框id为"kw"
通常百度搜索的每个结果对应界面元素的ID分别是数字1、2 、3、4顺序,即find_element_by_id(‘1’)可获取第一个出现的查询结果。
2、class属性定位:
find_element_by_class_name('s_ipt')
3、tag标签定位,<后边的标签,如div:
find_elements_by_tag_name('div')
find_element_by_tag_name('div')
其中find_elements是返回所有符合条件的元素,没有符合的返回空列表;
find_element是返回符合条件的第一个元素,没有符合条件的元素, 抛出 NoSuchElementException 异常
4、css选择器:
(1)根据tag名
find_elements_by_css_selector('div')
等价于
find_elements_by_tag_name('div')
(2)根据id属性,#id
find_element_by_css_selector('#kw')
等价于
find_element_by_id('kw')
(3)根据class属性, .class
find_elements_by_css_selector('.s_ipt')
等价于
find_elements_by_class_name('s_ipt')
(4)根据href属性,要加[]
find_elements_by_css_selector('[href="https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/static/protocol/https/soutu/css/soutu_new2_ae491b7.css]')
如果web页面只有一个href的话,可以只用[href]:
find_elements_by_css_selector('[href]')
(5)子元素与后代元素选择
如果元素2是元素1的直接子元素,可用大于号 > 选到子元素,语法如下:
find_elements_by_css_selector('元素1 > 元素2')
如果元素3是元素2的直接子元素,元素2是元素1的直接子元素,可用> 一层一层选到元素3:
find_elements_by_css_selector('元素1 > 元素2 >元素3')
或者用一个或者多个空格来选择元素1的后代元素3,语法如下:
find_elements_by_css_selector('元素1 元素3')
(6)css选择器联合语法,和:
chrome浏览器ctrl+shift+i调试出开发者工具,ctrl+f,可以验证css语法是否正确,如图:
id为u1的元素共5个,当前选择的第1个元素高亮显示
选择所有id为u1和u2的元素,用逗号“,”:
#u1,#u2
(7)指定选择父元素的第几个子元素,用:nth-child() :
span:nth-child(3) #span元素的第三个子元素
nth-child(3) #选择所有父元素的第三个子元素
span:nth-last-child(1) #span元素的倒数第1个子元素
选择父元素的偶数节点,用 nth-child(even)
p:nth-child(even)
选择父元素的奇数节点,用 nth-child(odd)
p:nth-child(odd)
(8)指定选择父元素的第几个某类型的子节点,用nth-of-type() :
span:nth-of-type(1) #选择第1个span类型的子元素
span:nth-last-of-type(2) #选择倒数第2个span类型的子元素
(9)相邻兄弟节点选择,用加号,“+”:
div + span #选择div后面紧跟着的兄弟节点span
div ~ span #选择div后面所有兄弟节点span